Top.Mail.Ru
Уведомления
Очистить все

[Решено] Отладка STM32F103C6T6 по UART

Страница 1 / 2
(@alexlaw1964)
Level 1

Здравствуйте.

У меня есть плата STM32F103C6T6-Blue-Pill.

Пробую отладить STM32 по UART, т.к. у меня нет отладчика.

За основу взята эта статья - https://habr.com/ru/articles/488672/

Вопрос такой.

После срабатывания и прерывания DebugMon_Handler(), возможно или нет продолжить выполнения кода?

И не очень понял, как вызвать DebugMon_Handler() при условии равенства регистра PC и одного из регистров FP_COMP.

Цитата
Создатель темы Размещено : 14.02.2024 11:21
Aveal
(@aveal)
Top level Admin

Добрый день!

По теме не подскажу, но в целом кажется, что эффективнее будет отладчик раздобыть... А если по UART, возможно будет удобнее конкретную информацию в него выдавать из конкретных мест программы и на основе этого отлаживать, но это наверно кому как, мне лично так намного удобнее.

ОтветитьЦитата
Размещено : 14.02.2024 14:14
(@alexlaw1964)
Level 1

Код сишный работает на на компе (codeblocks-17.12mingw-nosetup).

А на stm неожиданно для меня выдал не понятное.

Попытался отловить место.

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

Сразу не подумал об отладчике 🙁

 

ОтветитьЦитата
Создатель темы Размещено : 14.02.2024 16:23
(@alexlaw1964)
Level 1

Не знаю удобно или нет ссылаться на другой форум.

Чтобы было понятно, что я делаю.

стартап

ОтветитьЦитата
Создатель темы Размещено : 14.02.2024 16:59
(@eduard)
Level 4 Moderator

Запись от: @alexlaw1964

Пробую отладить STM32 по UART, т.к. у меня нет отладчика.

А прошиваете чем?

ОтветитьЦитата
Размещено : 14.02.2024 21:44
(@alexlaw1964)
Level 1

@eduard 

Прошиваю в STM32CubeProgrammer,

с помощью

Screenshot 20240215 124305~2
IMG 20240106 130214

 

ОтветитьЦитата
Создатель темы Размещено : 15.02.2024 12:47
(@eduard)
Level 4 Moderator

Купите ST Link. Избавитесь от многих проблем.

ОтветитьЦитата
Размещено : 15.02.2024 19:39
(@alexlaw1964)
Level 1

Запись от: @eduard

Купите ST Link. Избавитесь от многих проблем.

Для меня найти решение - это что-то типа охоты, азарта.

Решение должно быть. Не зря регистр CoreDebug->DEMCR имеет кучу бит (флагов).

Ну, а так вы правы - нужен отладчик.

ОтветитьЦитата
Создатель темы Размещено : 15.02.2024 19:52
(@alexlaw1964)
Level 1

Здравствуйте.

Сделала программатор программатор/отладчик JLink по этой статье - Делаем из BluePill пограмматор/отладчик JLink

Установил SEGGER Embedded Studio.

Импортировал проект из IAR Embedded Workbench.

В какой-то момент SEGGER запросил путь к IAR.

У меня путь - "C:\STM32Toolchain\IAR Systems\Embedded Workbench 9.1\arm\bin"

Я указал папку  IAR Systems.

Теперь SEGGER не может найти IARю

Вопрос:

Как указать правильный путь для SEGGER, чтобы он нашел IAR.

Я запутался и не могу найти эту опцию в настройках.

ОтветитьЦитата
Создатель темы Размещено : 17.02.2024 09:21
(@alexlaw1964)
Level 1

Так, с этим разобрался

Это окно появляется при Import-IAR EWARM Project

import iar

 

"\arm\bin" -  SEGGER сам добавляет к  папке, которую вы укажите.

Теперь

при компиляции вылезла следующая ошибка:

Rebuilding ‘debug_to_uart’ from solution ‘debug_to_uart’ in configuration ‘Debug External’
2> Compiling ‘system_stm32f1xx.c’
2> "C:/STM32Toolchain/IAR Systems/Embedded Workbench 9.1/arm/bin/iccarm" --silent --dlib_config ""C:/STM32Toolchain/IAR Systems/Embedded Workbench 9.1/arm/inc/c/DLib_Config_Normal.h"" -e -DDEBUG -I./CMSIS -I./Inc -I./Src -I./Sratup ./CMSIS/system_stm32f1xx.c --dependencies=m Debug/Obj/system_stm32f1xx.d --no_wrap_diagnostics -o Debug/Obj/system_stm32f1xx.o -On -r --cpu Cortex-M3 --fpu none
1> Assembling ‘startup_stm32f103x6.s’
1> "C:/STM32Toolchain/IAR Systems/Embedded Workbench 9.1/arm/bin/iasmarm" -S -I./CMSIS -I./Inc ./Sratup/startup_stm32f103x6.s -o Debug/Obj/startup_stm32f103x6.o -r --cpu Cortex-M3 --fpu none
2>
2> #include _DLIB_CONFIG_FILE_HEADER_NAME
2> ^
2> Fatal error detected, aborting.
2> Build failed

Как победить ее?

 

ОтветитьЦитата
Создатель темы Размещено : 17.02.2024 10:45
(@alexlaw1964)
Level 1

Вернулся к DebugMonitor -Пошаговая отладка без отладчика

Мое виденье этого.

Режим монитора отладки - включает отладку в запущенных системах с помощью обработчика исключений DebugMonitor. Это может быть полезно в сценариях, когда остановка ядра приведет к сбою чувствительных к времени подсистем, или в случаях использования, когда подключение отладчика невозможно.

обработчик void DebugMon_Handler().

Или когда просто нет отладчика, как у меня.

регистр управления монитором (DEMCR)

MON_EN - Определяет, включено исключение DebugMonitor или нет. Когда включено, отладочные “события” вызовут срабатывание исключения.
MON_PEND - Может использоваться для запуска исключения DebugMonitor независимо от того, имеет MON_EN значение 1 или нет.
MON_REQ - Не используется MCU. Программное обеспечение может использовать этот бит для передачи состояния режима монитора.
MON_STEP - Может быть переключена из исключения DebugMonitor для включения аппаратного одношагового выполнения.
Если задано, при возврате из обработчика исключений ядро выполнит единственную инструкцию, а затем вернется к исключению DebugMonitor. (?тут есть вопросы?)

Итак,чтобы вызвать обработчик достаточно строки - CoreDebug->DEMCR |= CoreDebug_DEMCR_MON_PEND_Msk;

В обработчике можно проверить, что вызвало прерывание

//DWTTRAP Указывает, что событие отладки было сгенерировано из-за конфигурации в DWT.
if (!SCB->DFSR & SCB_DFSR_DWTTRAP_Msk) {uart1_write_String("\r\nDWTTRAP");}
//BKPT Указывает, что произошло одно или несколько событий точки останова (либо с помощью FPB,/
if (!SCB->DFSR & SCB_DFSR_BKPT_Msk) uart1_write_String("\r\nBKPT");
//HALTED Указывает, что ядро было остановлено из-за запроса MON_STEP.
if (!SCB->DFSR & SCB_DFSR_HALTED_Msk) uart1_write_String("\r\nHALTED");

При выходе из обработчика продолжить выполнение

CoreDebug->DEMCR |= CoreDebug_DEMCR_MON_STEP_Msk;

или остановится

CoreDebug->DEMCR =~ CoreDebug_DEMCR_MON_STEP_Msk;

(при выходе из обработчика буде снова вызван обработчик)

ОтветитьЦитата
Создатель темы Размещено : 23.02.2024 13:07
(@alexlaw1964)
Level 1

Сегодня удалось подключиться через JLink (пост выше) к SEGGER Embedded Studio.

рис1
рис2
рис3
рис4

 

При запросе обновить прошивку - обновил.

 

ОтветитьЦитата
Создатель темы Размещено : 24.02.2024 16:22
(@alexlaw1964)
Level 1

Решил вопрос с

jlink warning

J-Link V7.94c Warning
The connected probe appears to be a J-Link clone.
Using the J-Link software with a clone is forbidden and illegal.
Proper operation cannot be guaranteed.
In case of doubt, please contact SEGGER via https://www.seqger.com/support/technical-support/ and include a screenshot of this dialog.
J-Link information:
S/N: 20090928
Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04
Built-in licenses: RDI, FlashDL,FlashBP, JFlash, GDBFull
O.K.

Предупреждение J-Link V7.94c
Подключенный датчик, по-видимому, является клоном J-Link.
Использование программного обеспечения J-Link с клоном запрещено.
Правильная работа не может быть гарантирована.
В случае сомнений, пожалуйста, свяжитесь с SEGGER через https://www.seqger.com/support/technical-support / и приложите скриншот этого диалога.
Информация о J-Link:
S/N: 20090928
Прошивка: J-Link ARM-OB STM32 скомпилирован 22 августа 2012 г. 19:52:04
Встроенные лицензии: RDI, FlashDL,FlashBP, JFlash, GDBFull
O.K.

При отладке, отладчик принудительно отключается.

Уже не помню, но прочитал гдето, что нужно убрать GDBFull на GDB.

В общем нашел другую прошивку

и с помощью шестнадцатеричного редактора и заменить строку "GDBFull" на "GDB".

PS:

Сообщение J-Link V7.94c Warning больше не появляется.

рис1

В общем перестал отваливаться отладчик.

В принципе я разобрался и без отладчика в своей проблеме:

Проблема была в статических переменных - static

ОтветитьЦитата
Создатель темы Размещено : 04.03.2024 16:52
(@alexlaw1964)
Level 1

Вот так работает под отладчиком

ОтветитьЦитата
Создатель темы Размещено : 05.03.2024 10:49
Aveal
(@aveal)
Top level Admin

Рад, что все получилось 👍

ОтветитьЦитата
Размещено : 05.03.2024 12:51
Страница 1 / 2
Поделиться: