一,處理思路(定時器模擬空閑中斷)
判斷串口接收到一條完整的數據以后置位一個標志位,主循環判斷此標志位處理數據.
如何判斷接收到一條完整的數據:
無論做的什么串口通信,數據總是一條一條的發送,發送完一條再發送另一條,
發送每一條數據之間存在時間間隔,串口接收數據的時候控制一個
變量在定時器里面累加,同時串口中斷接收數據的時候對這個變量清零!
如果串口一直接收數據這個變量永遠累加不到期望的數值,如果串口接收
數據以后不再接收數據,變量會累加到期望的數值,然后就是判斷接收到一條完整的數據.
二,由於每個單片機串口配置的寫法不一,只截圖說明使用
串口接收到數據時:Usart1ReadCnt++; Usart1IdleCnt = 0;
定時器 判斷Usart1ReadCnt !=0 說明串口接收到數據 然后 Usart1IdleCnt++
如果串口一直接收數據 Usart1IdleCnt將不能累加到 Usart1IdleTime (本程序設置的10) Ms
串口接收完一串數據以后,停了10Ms 沒有發過來數據, 則會執行
Usart1IdleCnt = 0;
Usart1ReadCntCopy = Usart1ReadCnt;
Usart1ReadCnt = 0;
Usart1ReadFlage = 1;
三,主循環調用
注意:如果通信時間過短小於10Ms,可修改定時器中斷進入時間
或者
四,其實STM32自帶空閑中斷檢測
五,測試
STM32自帶的串口空閑中斷判斷的相當及時!所以我不用它!因為很多時候我需要動態的空閑時間.
注:上面方案並不是最優的方式
想學習更優的方式請接着往下學習