iT邦幫忙

0

ST HAL庫Uart接收中斷問題

st hal c
  • 分享至 

  • xImage

近期在寫一個Uart接收的小程式使用ST的HAL庫,我是使用Uart中斷接收的方式來實做,但當我在HAL_UART_RxCpltCallback內加入HAL_delay後,程式就會卡住。有查過網路上的說法,好像中斷內不能做延遲,但沒提供解決方式。想請問板上的前輩這個問題該如何解決

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
ntustzeus
iT邦新手 3 級 ‧ 2023-05-25 09:09:26

中斷裡做的事應該儘量簡短,不然會影響其他中斷或主程式,不要說delay,較複雜的計算都不應該放在裡面

如果是Uart,在callback裡把讀到的值放到array後就該離開了

以前的開發是直接在isr裡寫東西,現在都有framework幫你包起來,只看到callback而看不到isr,就容易出這種問題…

在callback裡加個flag,然後在主程式的loop裡抓這個flag來做你想做的事

code會長得像這樣

HAL_UART_RxCpltCallback()
{
   flag_xxx=1;
}

main()
{
   while(1)
   {
       if(flag_xxx)
       {
           flag_xxx=0;
           // 看你想做什麼事
       }
   }

}

我要發表回答

立即登入回答