Jump to content

    
Sign in to follow this  
Vladimir_T

Почему-то зависает STM32F103

Recommended Posts

Здравствуйте, уважаемые коллеги, подскажите в чем тут дело? Для тестирования палаты на STM32F103 беру готовый проект Blinky из Кейл 5.4, процессор выбран, настройки правильные, компилирую, заливаю в процессор JLink-ом 7. Пробую отладку, но процессор зависает не доходя до main(). Отладка идет в Start_Up - файле, затем System_Init, инициализация тактирования (внутренний генератор - 24Мгц), затем устанавливается бит размещения таблицы веторов во флэше и после этого - процессор улетает в фатальное прерывание по сбою HardFault, по-моему. Может кто-ибудь знает, подскажите, пожалуйста.

Share this post


Link to post
Share on other sites

Если сделаете обработчик HardFault следующего вида, то в регистре R0 в отладчике получите адрес команды, на которой улетели в HardFault. А конкретную причину можно узнать, изучая Fault регистры, в книжке Ю можно найти описание.

__asm void HardFault_Handler(void) {
  TST LR, #4 
  ITE EQ 
  MRSEQ R0, MSP        ; Main Stack was used, put MSP in R0
  MRSNE R0, PSP        ; Process Stack was used, put PSP in R0
  LDR R0, [R0, #24]    ; Get stacked PC from stack
  B .
}

Share this post


Link to post
Share on other sites

В этом проэкте макроопределениями по умолчанию устанавливался источник тактирования HSE, тогда как кварц на моей плате отсутствует. Я был уверен, что если не завелся кварцевый генератор, то вызывается прерывание по сбою генератора, и процессор переходит назад на HSI. После правильной установки макроопределений стало работать нормально.

Share this post


Link to post
Share on other sites
Я был уверен, что если не завелся кварцевый генератор, то вызывается прерывание по сбою генератора, и процессор переходит назад на HSI.

Так и есть. Остальное проблемма софта. Если где то стоит бесконечное ожидание готовности HSE, то там и будем всегда висеть. А если анализа отката на HSI нет, то вообще любая хрень может получится.

 

Share this post


Link to post
Share on other sites
В этом проекте макроопределениями по умолчанию устанавливался источник тактирования HSE, тогда как кварц на моей плате отсутствует. Я был уверен, что если не завелся кварцевый генератор, то вызывается прерывание по сбою генератора, и процессор переходит назад на HSI. После правильной установки макроопределений стало работать нормально.

Вообще-то, SystemInit не должна была переключиться на HSE, если он не запустился. Обработчик прерывания CSS (NMI) - пустой, если сами его не написали. Ничего не переключит.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this