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

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

Продолжаю не спеша осваивать STM32. IDE CoCox, программатор - ST-link от STM32 DIscovery, интерфейс SWD.
На данный момент напрягает вот такой момент: когда я запускаю отладку, все работает нормально и управляется как надо. Но если выйти из режима отладки, программа, зашитая в МК, немедленно запускается и начинает работать. При подаче питания и отключенном программаторе - тоже.
По мне, так это не совсем правильно, неотлаженная программа при подключенной периферии может наделать кучу неприятностей.
Вопрос: как сделать, чтобы при выключенном режиме отладки запуск не происходил?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Так и должно быть, это ведь штатная функция МК - после ресета запускать программу. :)
Самый простой вариант - тумблер на ресет.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4604
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1621
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

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

Сообщение selenur »

Можно сделать так: в схему добавить джампер или тумблер, подключив к выводу, и добавить прерывание на изменение уровня, если на входе сигнал изменился с нуля на 1, то в глолальной переменной возводиться флаг, если с 1 в 0 сбрасывается, а в основном отлаживаемом коде иногда проверять эту переменную, и разрешать или нет выполнение кода.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

Просто у тех МК, с которыми я раньше работал (SX) был спецрежим отладки, и без подключенного отладчика контроллер, прошитый для отладки, вообще не запускался. Поскольку STM32 куда более развитый МК, я думал, что у него тоже есть нечто похожее.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

Может в этом и заключается развитость, что для отладки не нужно специального режима работы?
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4604
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1621
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

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

Сообщение selenur »

У Atmel которые AVR (arduino) так-же при прекращении отладки происходит перезагрузка, и самостоятельная работа, из-за этого сам сломал 2 фрезы, но сейчас стал умнее :-)
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

Тогда еще такой вопрос: как сделать, чтобы при отладке останавливались таймеры? Без этого пошаговая отладка практически невозможна - контроллер работает "из прерывания в прерывание".
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

А в какой именно момент их останавливать? :)
Они-ж на то и таймеры, что работают асинхронно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

При срабатывании точки останова, хотя бы.
Понятно, что при внешнем тактировании "сердцу не прикажешь", но при внутреннем - так или иначе таймеры связаны с общим тактированием.
Даже биты соответствующие есть в регистрах отладки для каждого таймера. Но пока я от них не добился результата.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Асинхронно не в смысле тактирования, а относительно выполнения основной программы.
Представь: в пошаговом режиме МК выполняет команду длинной больше одного такта, в середине команды срабатывает прерывание по таймеру. - Как прикажешь исполнять обработчик прерывания? И что делать с незавершённой командой?
Программу с прерываниями как правило отлаживают по частям - сначала отдельно каждый обработчик прерывания, а потом основную прогу не тормозя отлаженные обработчики.
Да и некоторые алгоритмы вообще невозможно отлаживать в пошаговом режиме.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

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

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

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

	// Разрешим останов при отладке
	RCC->APB2ENR |= RCC_APB2ENR_DBGMCUEN; // разрешим тактирование регистра отладки
	DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_TIM3_STOP; // разрешим останов
Теперь таймер притормаживает при останове программы, что, собственно, и требовалось.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Для желающих освоить AI на микроконтроллерах:
https://www.aliexpress.com/item/1005001483190346.html
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «Электроника»