Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

2 часа назад, Электронщик сказал:

Zhuk72 а где у вас включение SPI модуля находится?

В процедуре чтения я делаю

RFID_NSS = 0;
SPI2->CR1 |= SPI_CR1_SPE;

По завершению делаю обратный процесс.

Кстати, еще одна полезность в 103-м и аналогичных, имеющих бит-бандинг. На одном из сайтов (к сожалению не помню каком) обнаружил удобные дефайны для работы с портами.

Вписываете это где вам удобно:

Скрытый текст

// PA0..PA15, PB0..PB15, PC13..PC15, PD0..PD1 (STM32C8xx)
// Bit banding
// Input
#define PORTA ((uint32_t *)((0x42000000  + ((0x40010800 + 0x08)-0x40000000)*32)))
#define PORTB ((uint32_t *)((0x42000000  + ((0x40010C00 + 0x08)-0x40000000)*32)))
#define PORTC ((uint32_t *)((0x42000000  + ((0x40011000 + 0x08)-0x40000000)*32)))
#define PORTD ((uint32_t *)((0x42000000  + ((0x40011400 + 0x08)-0x40000000)*32)))
// Output
#define LATA ((uint32_t *)((0x42000000  + ((0x40010800 + 0x0C)-0x40000000)*32)))
#define LATB ((uint32_t *)((0x42000000  + ((0x40010C00 + 0x0C)-0x40000000)*32)))
#define LATC ((uint32_t *)((0x42000000  + ((0x40011000 + 0x0C)-0x40000000)*32)))
#define LATD ((uint32_t *)((0x42000000  + ((0x40011400 + 0x0C)-0x40000000)*32)))

 

Теперь если есть, например светодиод на PC13, то пишете #define LED LATC[13], после чего работаете со светодиодом по имени:

LED = 1;
LED = 0;
LED = ~LED;

Если порт работает на вход, например кнопка на РА1, то назначаете #define BUTTON1 PORTA[1], после чего обращаетесь с кнопкой напрямую по имени.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

У меня проблема случилась, почему -то после заливки кода I2C по регистрам, у меня теперь плата с процом видется как низкоскоростное устройство 

Вот такой скриншот, и шить могу только через ЮАРТ1 через ЮСБ-ТТЛ преобразователь, было у кого - то такое? А через ЮСБ - ТТЛ не удобно шиться, каждый раз перемычка и RESET/

Screenshot_7.jpg.c20fdd3f4f398e8b0db4ece5d5ce3d84.jpg

Zhuk72 f а есть кусочек кода с ДМА, чтобы хоть глянуть как оно работает?

 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Вы там в процессе опытов РА13 и РА14 не зацепили каким-то образом?

И почему не из среды программируете, а отдельной программой?

Скрытый текст

void spi2dma_init(void)
{
// SPI2_MISO - DMA_CH4
// SPI2_MOSI - DMA_CH5
  RCC->AHBENR |= RCC_AHBENR_DMA1EN;
/*1. Set the peripheral register address in the DMA_CPARx register. The data will be
moved from/ to this address to/ from the memory after the peripheral event.*/
  DMA1_Channel4->CPAR = (unsigned long)&SPI2->DR;
  DMA1_Channel5->CPAR = (unsigned long)&SPI2->DR;
/*2. Set the memory address in the DMA_CMARx register. The data will be written to or
read from this memory after the peripheral event.*/
  DMA1_Channel4->CMAR = (unsigned long)&rfid_in[0];
  DMA1_Channel5->CMAR = (unsigned long)&rfid_out[0];
/*3. Configure the total number of data to be transferred in the DMA_CNDTRx register.
After each peripheral event, this value will be decremented.*/
  DMA1_Channel4->CNDTR = 64;
  DMA1_Channel5->CNDTR = 64;
/*4. Configure the channel priority using the PL[1:0] bits in the DMA_CCRx register.*/
  DMA1_Channel4->CCR = DMA_CCR4_PL_0;
  DMA1_Channel5->CCR = DMA_CCR5_PL_0;
/*5. Configure data transfer direction, circular mode, peripheral & memory incremented
mode, peripheral & memory data size, and interrupt after half and/or full transfer in the
DMA_CCRx register.*/
  DMA1_Channel4->CCR |= (DMA_CCR4_MINC | DMA_CCR4_TCIE);                // Per->Mem
  DMA1_Channel5->CCR |= (DMA_CCR5_MINC | DMA_CCR5_DIR | DMA_CCR5_TCIE); // Mem->Per
/*6. Activate the channel by setting the ENABLE bit in the DMA_CCRx register.*/
  DMA1_Channel4->CCR |= DMA_CCR4_EN;
  DMA1_Channel5->CCR |= DMA_CCR5_EN;
  SPI2->CR2 |= (SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN);
  NVIC_EnableIRQ(DMA1_Channel4_IRQn);
  NVIC_EnableIRQ(DMA1_Channel5_IRQn);
}

void DMA1_IRQHandler(void)
{
  if(DMA1->ISR & DMA_ISR_TCIF4)         // Receive completed.
  {
    DMA1->IFCR &= ~DMA_IFCR_CTCIF4;    // Completion flag clear.
    // Процедура по завершению приема
  }
    else if (DMA1->ISR & DMA_ISR_TCIF5) // Transmit completed.
    {
      DMA1->IFCR &= ~DMA_IFCR_CTCIF5;   // Completion flag clear.
      // Процедура по завершению передачи
    }
}

 

Но в деле я это пока не проверял ))

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А из среды постоянно с самого начала ошибку выдает, могу только отладку оттуда загружать

Не знаю как но задел, этим кодом ноги отладчика 

/ текущее значение частоты PCLK1 (может быть от 2 до 32, включительно)
//I2C2->CR2 &= ~I2C_CR2_FREQ;
//I2C2->CR2 |= 2;


//2,097 МГц / 100 кГц = 10;

//I2C2->CCR &= ~I2C_CCR_CCR;
I2C2->CCR |= 10;
//I2C2->TRISE = 3;

Киньте пожалуйста как у Вас по скорости выставляется для I2C, а лучше инициализацию, я в инициализации только включил сам модуль I2C, тактирование I2C, с делителями теперь не знаю что делать, по приему передаче похоже на АВР.

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

Регулярные каналы ADC1 (0 - 3), ДМА.

 

F103_ADC_Test_DMA.zip

Да, много всего непонятного, куча режимов и т.д.

@Электронщик Какой у вас отладчик?

в принципе, расчетное время преобразования совпадает с реальным и равен 84 мкс - 4 канала.

Ссылка на комментарий
Поделиться на другие сайты

Кроме всего прочего нужно заглядывать в Errat-у, я тоже с i2c не работал, но глюки там точно были.

@Электронщик попробуйте в STM32 ST-LINK Utility стереть чип, а потом подключить через отладчик.

точно ноги SWD портите, в кубе вы выбирали отладку?

Ссылка на комментарий
Поделиться на другие сайты

Я за I2C спрашиваю, не хотите поиграться? А то что-то я один не могу его добить. Посмотрю потом, как вы настроили номера пинов на номера регулярных каналов

Ссылка на комментарий
Поделиться на другие сайты

так я и пишу что некуда подключить, о если айду в дипе вроде память была, у меня есть софтовый я его на RTC опробовал работает нормально, правда в блок режиме.

 

ну у меня совсем 1 резистор подстроечный, может и у меня не все гладко, я не знаю)

Ссылка на комментарий
Поделиться на другие сайты

Кстати I2C на HAL у меня запустилось давно, правда, вот функция записи и чтения внешней памяти по I2C на HAL у меня не работают почему-то. А по регистрам I2C тоже не могу запустить.

Еще вопрос я так понимаю для осциллографа лучше использовать инжекторные каналы, а не регулярные с ДМА, так как получим большую скорость, так как проц занят АЦП, а не ДМА, который 50% проца использует? Просто набросал себе осцилограф, и думаю как лучше? И еще тоже такой вопрос, в осциллографе смещение входа АЦП делаю половиной напряжения питания, а вот есть такая фишка на АЦП как смещение АЦП, я так понимаю мне его можно использовать для этих целей, а провод с половины питания проца можно убрать? И есть ли функция смещения АЦП в HAL? 

Кстати вычитал, что смещение АЦП предусмотрено только для инжекторных каналов.

Ссылка на комментарий
Поделиться на другие сайты

MasterElectric когда будет время с I2С аппаратным повозиться, ты скажи, а то я сам победить его не могу я тебе и свой набросок могу в личку скинуть, правда он не работает, но что-то близко, а ты как будет время напиши.

Ссылка на комментарий
Поделиться на другие сайты

нашел 24c32a atmel, но на AVR я так и не смог написать библиотеку под него, что-то он замысловатый. Тут нужно теорию вначале почитать, может пример где найду.  

@Электронщик Ну начал, буду мучать 24с64, думаю что поборю 9 регистров всего)

Ссылка на комментарий
Поделиться на другие сайты

 Просто, я кстати RTC DS1307 на АВР по регистрам запустил, а тут через HAL memory write memory read не работает, так же как и память.

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

I2C то ли сложный, то ли глючный. Изучаю http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries-expansions/stsw-stm32020.html На CMSIS примеров почти нет, а те что есть не на 100% стабильно работают судя по всему.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • А че за магнит то, с торсионными синфазно-поперечными полями?  Дураков много, а стиралок выпущено еще больше, на всех хватит.
    • @AlexeyStudent Поставили стабилизатор, все работает.
    • Тоже когда то собирал на смд.    https://cxem.net/radiomic/radiomic130.php 
    • В данном примере- конечно нет! Упор на ПЛАЗЬМУ!   Кондей брал типа МБГО (такой бурого цвета квадратик со стеклянными выводами). Думается, что если усложнить схему т.е. сделать хотьбы 5сек на разогрев спиральки Л. то она хлопнет не за 3 месяца , а подольше ...а вообще - дела "каменного века" ...наф-наф!  ;-)  , а схемка задержки уже в выключатель не влезет... В моей практике были вызовы по отключению вааще энергии в квартире ...как оказывалось  - КЗ от плазьмы вышибало центральный автомат , а хозяин , с перепугу от хлопка , больше не желал даже подойти к распред/щиту  ;-)    Увы - это основная ошибка гуру .  В однородном МП ЭДС не наводится!  Я с таким эффектом сталкивался когда сделал попытки с определением однородности материала магнита ....однородности -НИКАКОЙ ! У некоторых экземпляров неоднородность достигает до 50% !  А вот в учебниках об этом даже не заикаются  ...а теория - она без практики-ничто! ;-)  На фото : сьём ЭДС с полюса магнита индукционной катушкой . Такой сьём позволяет как бы "усилить" регистрацию эффекта и избежать шума от токосьёмов...
    • @Владислав2 Вы разницу между газоразрядными и вакуумно-люминесцентными индикаторами понимаете? Какой накал у ГРИ? У ТС ИН-14, в которых из за повышенного напряжения преобразователя 5>170 (как уже писАл@oleg_s ) пары ртути начинают светиться. У меня такое на некоторых ИН-18 наблюдалось (с шарами), но там не исправить. Насколько помню данные часы у китайцев на статике работают, в теории ток сегментов замерить можно. Ну и соответственно уменьшать выходное напряжение DC-DC преобразователя, предварительно срисовав схему, там, правда плохо видно, трансформатор установлен. Либо в анодах ламп повышать сопротивления токоограничевающих резисторов на 1 выводе ИН-14. Еще как вариант, собрать свой преобразователь на MC34063 или МАХ1771 и выкинув штатный отрегулировать выходное напряжение, правда некоторые экземпляры MC от 5в не стабильно заводятся.
    • Да и у меня почти такая, только класс D мой организм не воспринимает. 
×
×
  • Создать...