單片機模塊化程序: 關於串口接收處理數據


 

一,處理思路(定時器模擬空閑中斷)

  判斷串口接收到一條完整的數據以后置位一個標志位,主循環判斷此標志位處理數據.

  如何判斷接收到一條完整的數據:

    無論做的什么串口通信,數據總是一條一條的發送,發送完一條再發送另一條,

    發送每一條數據之間存在時間間隔,串口接收數據的時候控制一個

    變量在定時器里面累加,同時串口中斷接收數據的時候對這個變量清零!

    如果串口一直接收數據這個變量永遠累加不到期望的數值,如果串口接收

    數據以后不再接收數據,變量會累加到期望的數值,然后就是判斷接收到一條完整的數據.

 

二,由於每個單片機串口配置的寫法不一,只截圖說明使用

 

 

 

 

 

 

 

 

 

 

 

串口接收到數據時:Usart1ReadCnt++;  Usart1IdleCnt = 0;

 

定時器 判斷Usart1ReadCnt !=0 說明串口接收到數據  然后 Usart1IdleCnt++

如果串口一直接收數據 Usart1IdleCnt將不能累加到 Usart1IdleTime (本程序設置的10)  Ms

串口接收完一串數據以后,停了10Ms 沒有發過來數據, 則會執行

Usart1IdleCnt = 0;
Usart1ReadCntCopy = Usart1ReadCnt;
Usart1ReadCnt = 0;
Usart1ReadFlage = 1;

 

 

 

三,主循環調用

 

 

 

 

 

 

注意:如果通信時間過短小於10Ms,可修改定時器中斷進入時間

或者

 

 

 

 

 

 

 

 

四,其實STM32自帶空閑中斷檢測

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

五,測試

 

 

 

STM32自帶的串口空閑中斷判斷的相當及時!所以我不用它!因為很多時候我需要動態的空閑時間.

 

注:上面方案並不是最優的方式

想學習更優的方式請接着往下學習

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM