Перейти к содержанию
    

STM32 очень странный глюк USART1

Всем привет.

Такое дело: на STM32F103RG есть USART. Я его настроил, с первого взгляда всё заработало (передавал текстовую строку в терминал на комп через FT232 по прерываниям, строка приходила и правильно читалась в терминале).

Проблема в том, что сразу после прошивки (шью через JTAG ST-Link'ом) всё работает правильно. Однако если выключить и включить контроллер, то

  • USART инициализируется
  • Первый раз попадает в прерывание USART1_IRQn (в коде обработчика в самом начале есть включение светодиода, он загорается).
  • После чего контроллер виснет на HardFault_Handler (посмотрел содержимое PC через ST-Link Utility), ничего не передав по USART (смотрел на линию Tx осциллографом, там ничего нет).
  • Особый прикол в том, что если попытаться отдладить программу через JTAG и посмотреть, где вылезает ошибка, то всё работает хорошо.
  • Перепрошивка решает проблему, всё снова работает как надо до следующего отключения питания.

Что делать?

Очень рассчитываю на любые указания, я почти разбил себе голову. Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

hardault может возникать совершенно по разным причинам. Например, проблемы с памятью или вообще переполнение стека или неправильная инициализация, потому без кода ничего не посоветуешь тут. JTAG влиять может, точнее остановки по коду влияют...

У меня на этом камне работают все USARTы и UARTы, правда только с прерыванием на прием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А программа прошивается во Flash?

Указанный эффект может наблюдаться, если программа загружена в RAM.

 

Если пользуетесь IAR, проверьте галочку "Use flash loader" в опциях Debugger'а

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда пользовался ИАР до 6.30, то приходилось .icf файл создавать самому, так как стандартных не было в комплекте. А вот когда перешел на 6.30 и попробовал использовать .icf файл предыдущей версии, то оказалось, что не работает с похожими симптомами. В итоге выяснил, что для прерываний может использовать отдельный стек, так вот в новых файлах .icf он прописан, а в старых этого описания нет. Когда обнаружил, что в новой версии ИАР есть штатный ICF файл для моего камня и прописал его, то все заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...