近期在寫一個Uart接收的小程式使用ST的HAL庫,我是使用Uart中斷接收的方式來實做,但當我在HAL_UART_RxCpltCallback內加入HAL_delay後,程式就會卡住。有查過網路上的說法,好像中斷內不能做延遲,但沒提供解決方式。想請問板上的前輩這個問題該如何解決
中斷裡做的事應該儘量簡短,不然會影響其他中斷或主程式,不要說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;
// 看你想做什麼事
}
}
}