Страница 9 из 9

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 10 июл 2014, 13:51
Сергей Саныч
Продолжаю не спеша осваивать STM32. IDE CoCox, программатор - ST-link от STM32 DIscovery, интерфейс SWD.
На данный момент напрягает вот такой момент: когда я запускаю отладку, все работает нормально и управляется как надо. Но если выйти из режима отладки, программа, зашитая в МК, немедленно запускается и начинает работать. При подаче питания и отключенном программаторе - тоже.
По мне, так это не совсем правильно, неотлаженная программа при подключенной периферии может наделать кучу неприятностей.
Вопрос: как сделать, чтобы при выключенном режиме отладки запуск не происходил?

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 10 июл 2014, 17:07
Serg
Так и должно быть, это ведь штатная функция МК - после ресета запускать программу. :)
Самый простой вариант - тумблер на ресет.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 10 июл 2014, 17:53
selenur
Можно сделать так: в схему добавить джампер или тумблер, подключив к выводу, и добавить прерывание на изменение уровня, если на входе сигнал изменился с нуля на 1, то в глолальной переменной возводиться флаг, если с 1 в 0 сбрасывается, а в основном отлаживаемом коде иногда проверять эту переменную, и разрешать или нет выполнение кода.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 10 июл 2014, 20:08
Сергей Саныч
Просто у тех МК, с которыми я раньше работал (SX) был спецрежим отладки, и без подключенного отладчика контроллер, прошитый для отладки, вообще не запускался. Поскольку STM32 куда более развитый МК, я думал, что у него тоже есть нечто похожее.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 10 июл 2014, 20:29
michael-yurov
Может в этом и заключается развитость, что для отладки не нужно специального режима работы?

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 10 июл 2014, 20:47
selenur
У Atmel которые AVR (arduino) так-же при прекращении отладки происходит перезагрузка, и самостоятельная работа, из-за этого сам сломал 2 фрезы, но сейчас стал умнее :-)

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 11 июл 2014, 13:49
Сергей Саныч
Тогда еще такой вопрос: как сделать, чтобы при отладке останавливались таймеры? Без этого пошаговая отладка практически невозможна - контроллер работает "из прерывания в прерывание".

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 11 июл 2014, 21:01
Serg
А в какой именно момент их останавливать? :)
Они-ж на то и таймеры, что работают асинхронно.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 11 июл 2014, 21:11
Сергей Саныч
При срабатывании точки останова, хотя бы.
Понятно, что при внешнем тактировании "сердцу не прикажешь", но при внутреннем - так или иначе таймеры связаны с общим тактированием.
Даже биты соответствующие есть в регистрах отладки для каждого таймера. Но пока я от них не добился результата.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 11 июл 2014, 22:34
Serg
Асинхронно не в смысле тактирования, а относительно выполнения основной программы.
Представь: в пошаговом режиме МК выполняет команду длинной больше одного такта, в середине команды срабатывает прерывание по таймеру. - Как прикажешь исполнять обработчик прерывания? И что делать с незавершённой командой?
Программу с прерываниями как правило отлаживают по частям - сначала отдельно каждый обработчик прерывания, а потом основную прогу не тормозя отлаженные обработчики.
Да и некоторые алгоритмы вообще невозможно отлаживать в пошаговом режиме.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 14 июл 2014, 14:24
Сергей Саныч
UAVpilot писал(а):Представь: в пошаговом режиме МК выполняет команду длинной больше одного такта, в середине команды срабатывает прерывание по таймеру. - Как прикажешь исполнять обработчик прерывания? И что делать с незавершённой командой?
Так же как при обычной работе. Подождать завершения команды, очистить конвейеры и пойти на прерывание. Либо, если команда ооочень длинная, прервать ее выполнение. Разумеется, частичные результаты работы недовыполненной команды не должны никуда заноситься.
------------

В общем, всё оказалось достаточно просто. Есть специальные регистры (DBGMCU_APB1_FZ и DBGMCU_APB2_FZ), а в них - биты, позволяющие "заморозить" любой таймер при входе в отладку - хоть по шагам, хоть по точке останова.
Однако ж с разбега установка нужных битов не дала результата.
Оказывается, этот узел нужно еще и отдельно разрешать, как любую другую периферию этих МК, вроде таймеров или ЦАП. Битом DBGMCUEN в RCC_APB2ENR.

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

	// Разрешим останов при отладке
	RCC->APB2ENR |= RCC_APB2ENR_DBGMCUEN; // разрешим тактирование регистра отладки
	DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_TIM3_STOP; // разрешим останов
Теперь таймер притормаживает при останове программы, что, собственно, и требовалось.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Добавлено: 10 мар 2021, 22:00
Serg
Для желающих освоить AI на микроконтроллерах:
https://www.aliexpress.com/item/1005001483190346.html