Микроконтроллеры STM32 - тонкости работы, отладочные платы

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
smacorp
Друг Кота
Сообщения: 3471
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение smacorp »

Я CubeIDE пользуюсь редко, но с каких пор Куб стал компилировать код? Генерировать проект, который потом компилируется, например, Keil, это одно, но сразу компилировать Си-шный код CubeIDE давно научился?
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Уош
Опытный кот
Сообщения: 700
Зарегистрирован: Вс мар 23, 2025 14:56:55

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение Уош »

smacorp, вроде да: "STM32CubeIDE is an advanced C/C++ development platform with peripheral configuration, code generation, code compilation, and debug features for STM32" (тоже редко пользовался и давно)

Добавлено after 31 minute 41 second:
С Volatile вчера не помогло. Но может сегодня поможет? Бывает у Cube IDE такой загон, иногда он bin файл не перезаписывает или собирает по предыдущему коду, а я этого не заметил, приговорил Volatile, и продолжил отлаживать костыль printf...
Да, так и вышло - Cube настолько "умный", что пока не внесешь значительные изменения в код, он может не пересобраться. Не раз с утра такое замечал - куб запустил, код собрал, а бинарник остался вчерашний
Что-то не верится мне в это. Не знаю ни одной среды разработки с таким поведением.

Как уже говорил выше, лучше бы начать с азов, с изучения двоичной алгебры, языка, потом инструмента... ничего хорошего из того, как Вы делаете сейчас, не выйдет, поверьте. Даже если получится работающая программа, в итоге останется крайне неправильный опыт.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение jcxz »

С Volatile вчера не помогло.
Уж который раз наш мучитель страйкболистов пишет про какой-то 'Volatile'. Кто-нить знает - что это такое? :dont_know:
Может все здесь думают, что он имеет в виду 'volatile', а он на самом деле в коде пишет 'Volatile'. :))) Который где-нить в его хидерах (откуда-то скачанных) определён как:

Код: Выделить всё

#define Volatile
От того и чудеса с этим мнимым Volatile.

Добавлено after 1 minute 9 seconds:
Как уже говорил выше, лучше бы начать с азов
Согласен полностью. Автору нужно брать учебник и садиться за учёбу. Рано ему ещё программы писать....

Говорить: "Загляни в дизассемблер кода или в листинг - и сразу поймёшь, что не так с переменными и как они в реале работают" - вообще не имеет смысла. Всё равно, что слепому говорить "Оцени красоту заката".
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

Есть вопрос по отладке. Тренируюсь на STM32F407G-DISC1. Сейчас пытаюсь запустить АЦП с DMA. Если запускать программу в режиме отладки, напряжение показывает правильно. Если выйти из отладки и нажать кратковременно Ресет , отображаемое напряжение на 15% меньше, но измерение работает. Если выключить и включить питание(или подержать Ресет более сек.)- половина напряжения и на его изменение не реагирует. Ну да ладно с измерениями( программа написана не правильно), но в чем тогда смысл отладки?
tonyk
Это не хвост, это антенна
Сообщения: 1305
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение tonyk »

lubitel5 писал(а):чем тогда смысл отладки?

Да хотя бы в том, чтобы узнать о проблемах в вашей схеме и ПО, коли они так реагируют на изменение способа запуска _вашей_ программы.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение jcxz »

Ну да ладно с измерениями( программа написана не правильно), но в чем тогда смысл отладки?
Вот как раз в этом, кэп. Вы увидели в реале, что ваша "программа написана неправильно". 8)
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение HardWareMan »

но в чем тогда смысл отладки?

Отладка отладке рознь. Если речь за статичную/пошаговую, то она лишь для проверки правильности вашей математики алгоритмов и, возможно, проверки правильности настройки оборудования по вычитке его статусов. А есть динамическая отладка, которая чаще в режиме реального времени и аппаратный отладчик а так же режим отладки в IDE никакого к ней отношения не имеют. Нарушение таймингов - частая ошибка новичков при работе с реальным железом.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

[uquote="lubitel5",url="/forum/viewtopic.php?p=4727511#p4727511"]Ну да ладно с измерениями( программа написана не правильно), но в чем тогда смысл отладки?
Вот как раз в этом, кэп. Вы увидели в реале, что ваша "программа написана неправильно". 8)[/uquote]

Это я увидел и без отладки.

Добавлено after 1 minute 44 seconds:
lubitel5 писал(а):чем тогда смысл отладки?

Да хотя бы в том, чтобы узнать о проблемах в вашей схеме и ПО, коли они так реагируют на изменение способа запуска _вашей_ программы.


Как раз с этим такая отладка мне и не помогает.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение veso74 »

lubitel5, задавать вопросы о коде без самого кода бессмысленно. Поделитесь хотя бы фрагментом своего кода.
Можете попробовать сделать невозможное? Часто одна строчка или отсутствие настройки ставят исполнение в невозможные ситуации.
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

[uquote="lubitel5",url="/forum/viewtopic.php?p=4727511#p4727511"]но в чем тогда смысл отладки?

Отладка отладке рознь. Если речь за статичную/пошаговую, то она лишь для проверки правильности вашей математики алгоритмов и, возможно, проверки правильности настройки оборудования по вычитке его статусов. А есть динамическая отладка, которая чаще в режиме реального времени и аппаратный отладчик а так же режим отладки в IDE никакого к ней отношения не имеют. Нарушение таймингов - частая ошибка новичков при работе с реальным железом.[/uquote]

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

Добавлено after 2 minutes 5 seconds:
lubitel5, задавать вопросы о коде без самого кода бессмысленно. Поделитесь хотя бы фрагментом своего кода.
Можете попробовать сделать невозможное? Часто одна строчка или отсутствие настройки ставят исполнение в невозможные ситуации.


Это можно попробовать.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение HardWareMan »

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

А придётся, увы. Таков путь.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

MX_ADC1_Init();
static void MX_ADC1_Init(void)
{
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}

/** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_VREFINT;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
//----------
VREF = calculate_Vref (VREFIN_CAL); // функция вычисления Vref

uint16_t VREFINT = 0; // измеренное VREFINT
float calculate_Vref (uint16_t VREFIN_Cal) { // функция вычисления Vref
ADC1->CR2 |= ADC_CR2_ADON; // разрешить АЦП
// измерение сигнала
ADC1->CR2 |= ADC_CR2_SWSTART; // запуск АЦП
while(!(ADC1->SR & ADC_SR_EOC)) ; // ожидание завершения преобразования
VREFINT= ADC1->DR;
VREF = 3.3 * VREFIN_Cal / VREFINT;
return VREF;
}

В реалии VREFINT= ADC1->DR=4095 вместо 1682.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение HardWareMan »

Физическое подключение аналогового домена контроллера выполнено согласно букваря?
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

VREFINT, внутренний IN_17, настраивал через CubeMX.
Аватара пользователя
sc0rpy
Открыл глаза
Сообщения: 61
Зарегистрирован: Ср июн 18, 2025 07:20:55

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение sc0rpy »

VREFINT, внутренний IN_17, настраивал через CubeMX.

а если из ADC_Channel_TempSensor прочитать значение?
глаза баяца, руки из жопы, но я не здаюсь
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение HardWareMan »

VREFINT, внутренний IN_17, настраивал через CubeMX.

Я имел в виду наружные пины контроллера. Или у вас готовая девборда? Если так, посмотрите на её схему, иногда там тоже упрощено.
Изображение
Вложения
Screenshot_20250701_150056.png
(127.78 КБ) 936 скачиваний
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

Часть схемы такая, но получается дело не в ней. Наверное я не правильно пользуюсь CubeMX.IDE. Сначала я настраивал IN_11. потом VREFIN, по факту менял только Sampling Time с 3 на 28 и проверял через стат. отладку. Сейчас сделал так: сначала поставил поставил галку на IN_11, потом снял с VREFIN (Sampling Time в настройках сохраняется)- не работает IN_11. Потом снял галку с IN_11 и поставил на VREFIN (Sampling Time сбросилось по умолчанию), выставил Sampling Time=28, сгенерировал- заработало. Похожее было и с непрерывным режимом АЦП: после генерации на Single-channel, single conversion mode, а потом на Single-channel continuous conversion mode, последний у меня не работал. Возможно нужно перед изменением сбрасывать настройки, не знаю. Но вот когда работает в реалии, при пошаговой настройке не выходит из while(), только через Run.
Вложения
Схема.png
(19.9 КБ) 194 скачивания
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение veso74 »

После внесения изменений нажмите "сохранить все", а затем сгенерируйте код (прописав свой код только в указанных местах). Таким образом, код будет под контролем.

Иногда также запускаю очистку, а затем делает и компиляцию. В меню есть опция.
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

Не знаю, может и не корректный вопрос, но... Пытаюсь хоть немного разобраться с прерываниями и интересует: вот такая реализация обработки данных по прерыванию правильная или нет?

ADC1->SQR1 =0; // 1 регулярный канал
ADC1->SQR3 =11; // 1 преобразование - канал 0
ADC1->SMPR1 |= ADC_SMPR1_SMP11_1; // Установка sample time 28 для канала 11
ADC1->CR2 |= ADC_CR2_DMA; // разрешение DMA
ADC1->CR1 &= ~ADC_CR1_SCAN; // запрет режима сканирования
ADC1->CR2 &= ~ADC_CR2_EOCS; // сбрасываем этот бит, сгенерирован Кубом и не работает непрерывный режим
ADC1->CR2 |= ADC_CR2_CONT; // разрешить непрерывный режим
ADC1->CR2 |= ADC_CR2_ADON; // разрешить АЦП

//----------// Настройка DMA
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN; // включаем тактирование шины DMA2

DMA2_Stream0->PAR = (uint32_t) &ADC1->DR; // указываем откуда брать данные
DMA2_Stream0->NDTR = 256; // количество данных которые пишем
DMA2_Stream0->M0AR = (uint32_t) ADC_sum; // указываем куда ложить данные
DMA2_Stream0->CR |= (1 << 13); // размер данных памяти
DMA2_Stream0->CR |= (1 << 11); // размер данных перефирии
DMA2_Stream0->CR |= (1 << DMA_SxCR_CIRC_Pos); // circular
DMA2_Stream0->CR |= (1 << DMA_SxCR_MINC_Pos); // инкремируем адрес памяти для передачи данных
DMA2_Stream0->CR |= (1 << DMA_SxCR_TCIE_Pos); // разрешаем прерывание по завершению передачи данных

DMA2_Stream0->CR |= (1 << DMA_SxCR_EN_Pos); // включаем DMA
NVIC_EnableIRQ(DMA2_Stream0_IRQn); // разрешить прерывания DMA2_Stream0

ADC1->CR2 |= ADC_CR2_SWSTART; // запуск АЦП

while (1)
{
if (flag_end_DMA) {
for (uint16_t count = 0; count < 256; ++count) {
ADC_rez += ADC_sum [count];
}
ledprint (ADC_rez / 256);
flag_end_DMA = 0;
ADC1->CR2 &=~ ADC_CR2_DMA; // запрещаем DMA
ADC1->CR2 |= ADC_CR2_DMA; // разрешение DMA
ADC1->CR2 |= ADC_CR2_ADON; // разрешить АЦП
ADC1->CR2 |= ADC_CR2_SWSTART; // запуск АЦП

}
}
//----------

void DMA2_Stream0_IRQHandler (void) { // прерывания DMA
ADC1->CR2 &=~ ADC_CR2_ADON; // запрет АЦП
DMA2->LIFCR |= (1 << 5) | (1 << 4) | (1 << 3); // сбрасываем флаг окончания передачи,полупередачи и ошибки передачи DMA
flag_end_DMA = 1;
}
Вложения
ADC_DMA_interrupt.txt
(2.63 КБ) 196 скачиваний
lubitel5
Открыл глаза
Сообщения: 57
Зарегистрирован: Пн янв 13, 2014 16:01:21

Re: Микроконтроллеры STM32 - тонкости работы, отладочные пла

Сообщение lubitel5 »

RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // включаем тактирование TIM3
TIM3->PSC = 41; // Частота 1 МГц (42 / (41+1))
TIM3->ARR = 65000;
TIM3->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_1; // CC1 and CC2 channel is configured as input, IC1 and IC2 is mapped on TI1
TIM3->CCER |= TIM_CCER_CC1P_Msk | TIM_CCER_CC1E_Msk | TIM_CCER_CC2E_Msk; // TIM3_CCR1- активный по спаду, TIM3_CCR2- активный по наростанию, capture enabled
TIM3->SMCR |= TIM_SMCR_TS_0 | TIM_SMCR_TS_2 | TIM_SMCR_SMS_2; // TS-Trigger selection: 101: Filtered Timer Input 1 (TI1FP1); : SMS-Reset mode
NVIC_EnableIRQ(TIM3_IRQn); // разрешаем прерывания от TIM3

//----------
void TIM3_IRQHandler () { // interrupt TIM3
GPIOD->BSRR = GPIO_PIN_13;
}
Здравствуйте. Хочу настроить режим PWM input mode для работы с пультом. Пр нажатии на кнопку в регистре TIMx status register (TIMx_SR) устанавливаются флаги что значения счетчика зафиксированы в регистрах TIMx_CCR1,2, значит сигнал захватывается? Но не вызывается прерывание, почему?
Ответить

Вернуться в «ARM»