|
|
  |
STM32F103+USB Keil ST-Link отладка |
|
|
|
Oct 29 2013, 06:07
|
Участник

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604

|
А нигде в коде не встречается следующая строка:
AFIO->MAPR = (AFIO->MAPR & ~AFIO_MAPR_SWJ_CFG) | AFIO_MAPR_SWJ_CFG_DISABLE; ?
Это отключение JTAG.
|
|
|
|
|
Oct 29 2013, 07:38
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Я отлаживаю через SWD, не через JTAG. И борд действительно умирает - перестают даже мигать леды, что переключаются в каждом интерапте. Писать в RAM, а потом читать после ресета - идея красивая. Вот только я не знаю, где именно происходит проблема. Дебаге весь код проходит отлично. Да и так работает с вероятностью 70 процентов. Ставить "маячки" на прохождение каких-то точек можно. Но кода в USB много. У меня сложилось впечатление, что как работает USB не знает никто  . Все берут какой-то пример с USB от третьих лиц, и вокруг уже накручивают свою функциональность, стараясь не прикасаться к USB. Судя по всему - проблема на этапе распознавания USB устройства компьютером.
|
|
|
|
|
Oct 29 2013, 12:47
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Нет никакой ОС. Есть пример MassStorage, где весь код работает в прерывании. Есть SD card, для которого реализованы синхронные запись и чтение блока Есть UART - в интеррапте берутся полученные байты и складываются в буфер И есть цикл, который смотрит - не пришло ли что-то из UARTа, и если пришло - то обрабатывает. Когда накопится достаточно информации - записывает данные на карту, используя FatFS Затык происходит во время инициализации USB. Похоже, что если устройство замешкается и не обработает вовремя пакет от хоста - то происходит сбой. А точнее поймать ничего не могу.
|
|
|
|
|
Oct 29 2013, 12:55
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(igorle @ Oct 29 2013, 16:47)  А точнее поймать ничего не могу.  ну так процессор-то все равно должен где-то вертеться?? напишите заглушки для exception, примерно такие: Код volatile unsigned int abort_address;
void CheckUndefined(void) { abort_address = __return_address(); while(1); }
void CheckSWI(void) { abort_address = __return_address(); while(1); }
void CheckAbort(void) { abort_address = __return_address(); while(1); }
void CheckPrefetch(void) { abort_address = __return_address(); while(1); }
void CheckReserved(void) { abort_address = __return_address(); while(1); } ну и в стартапе их прописать запуститься из-под отладчика и ждать сбоя  как раз будет понятно, какое исключение случилось и откуда оно случилось
|
|
|
|
|
Oct 29 2013, 14:29
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Цитата(toweroff @ Oct 29 2013, 16:55)  ну так процессор-то все равно должен где-то вертеться?? напишите заглушки для exception, примерно такие: ... Не, такие проблемы я уже научился отлавливать. Если процессор где-то вертится, то я могу подцепиться дебагером и посмотреть стек, регистры и примерно понять - где произошла ошибка. А у меня - процессор не реагирует, из отладчика вываливается с сообщением "Cannot access target. Shutting down debugging session". Снова подцепиться дебагером не могу, пока не дерну ножку ресет
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|