单片机模块化程序: 关于串口接收处理数据


 

一,处理思路(定时器模拟空闲中断)

  判断串口接收到一条完整的数据以后置位一个标志位,主循环判断此标志位处理数据.

  如何判断接收到一条完整的数据:

    无论做的什么串口通信,数据总是一条一条的发送,发送完一条再发送另一条,

    发送每一条数据之间存在时间间隔,串口接收数据的时候控制一个

    变量在定时器里面累加,同时串口中断接收数据的时候对这个变量清零!

    如果串口一直接收数据这个变量永远累加不到期望的数值,如果串口接收

    数据以后不再接收数据,变量会累加到期望的数值,然后就是判断接收到一条完整的数据.

 

二,由于每个单片机串口配置的写法不一,只截图说明使用

 

 

 

 

 

 

 

 

 

 

 

串口接收到数据时: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