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
Так и должно быть, это ведь штатная функция МК - после ресета запускать программу.
Самый простой вариант - тумблер на ресет.
Самый простой вариант - тумблер на ресет.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- selenur
- Почётный участник
- Сообщения: 4604
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1621
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Можно сделать так: в схему добавить джампер или тумблер, подключив к выводу, и добавить прерывание на изменение уровня, если на входе сигнал изменился с нуля на 1, то в глолальной переменной возводиться флаг, если с 1 в 0 сбрасывается, а в основном отлаживаемом коде иногда проверять эту переменную, и разрешать или нет выполнение кода.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: 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
- Почётный участник
- Сообщения: 11626
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4634
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Может в этом и заключается развитость, что для отладки не нужно специального режима работы?
- selenur
- Почётный участник
- Сообщения: 4604
- Зарегистрирован: 21 авг 2013, 19:44
- Репутация: 1621
- Настоящее имя: Сергей
- Откуда: Новый Уренгой
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
У Atmel которые AVR (arduino) так-же при прекращении отладки происходит перезагрузка, и самостоятельная работа, из-за этого сам сломал 2 фрезы, но сейчас стал умнее
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Исходники моих программ: 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
А в какой именно момент их останавливать?
Они-ж на то и таймеры, что работают асинхронно.
Они-ж на то и таймеры, что работают асинхронно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Сергей Саныч
- Мастер
- Сообщения: 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
Асинхронно не в смысле тактирования, а относительно выполнения основной программы.
Представь: в пошаговом режиме МК выполняет команду длинной больше одного такта, в середине команды срабатывает прерывание по таймеру. - Как прикажешь исполнять обработчик прерывания? И что делать с незавершённой командой?
Программу с прерываниями как правило отлаживают по частям - сначала отдельно каждый обработчик прерывания, а потом основную прогу не тормозя отлаженные обработчики.
Да и некоторые алгоритмы вообще невозможно отлаживать в пошаговом режиме.
Представь: в пошаговом режиме МК выполняет команду длинной больше одного такта, в середине команды срабатывает прерывание по таймеру. - Как прикажешь исполнять обработчик прерывания? И что делать с незавершённой командой?
Программу с прерываниями как правило отлаживают по частям - сначала отдельно каждый обработчик прерывания, а потом основную прогу не тормозя отлаженные обработчики.
Да и некоторые алгоритмы вообще невозможно отлаживать в пошаговом режиме.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Сергей Саныч
- Мастер
- Сообщения: 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
Для желающих освоить AI на микроконтроллерах:
https://www.aliexpress.com/item/1005001483190346.html
https://www.aliexpress.com/item/1005001483190346.html
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...