【转载】单片机模块化程序3-关于串口接收处理数据

[复制链接]
1384|13
 楼主| HuangHongLun 发表于 2019-10-31 15:54 | 显示全部楼层 |阅读模式
一,处理思路(定时器模拟空闲中断)
  判断串口接收到一条完整的数据以后置位一个标志位,主循环判断此标志位处理数据.
  如何判断接收到一条完整的数据:
    无论做的什么串口通信,数据总是一条一条的发送,发送完一条再发送另一条,发送每一条数据之间存在时间间隔,串口接收数据的时候控制一个
    变量在定时器里面累加,同时串口中断接收数据的时候对这个变量清零!如果串口一直接收数据这个变量永远累加不到期望的数值,如果串口接收
    数据以后不再接收数据,变量会累加到期望的数值,然后就是判断接收到一条完整的数据.

 楼主| HuangHongLun 发表于 2019-10-31 15:55 | 显示全部楼层
二,由于每个单片机串口配置的写法不一,只截图说明使用
819239-20191014030057264-671296842.jpg




819239-20191014024423712-1780147479.jpg





819239-20191014024336180-1940640834.jpg


串口接收到数据时:Usart1ReadCnt++;  Usart1IdleCnt = 0;

定时器 判断Usart1ReadCnt !=0 说明串口接收到数据  然后 Usart1IdleCnt++
如果串口一直接收数据 Usart1IdleCnt将不能累加到 Usart1IdleTime (本程序设置的10)  Ms
串口接收完一串数据以后,停了10Ms 没有发过来数据, 则会执行
Usart1IdleCnt = 0;
Usart1ReadCntCopy = Usart1ReadCnt;
Usart1ReadCnt = 0;
Usart1ReadFlage = 1;
819239-20191014024713740-282029359.jpg

 楼主| HuangHongLun 发表于 2019-10-31 15:56 | 显示全部楼层
三,主循环调用
819239-20191014025156165-685665223.jpg



819239-20191014025609292-677937885.jpg



注意:如果通信时间过短小于10Ms,可修改定时器中断进入时间
或者
819239-20191014025753680-1680107567.jpg

 楼主| HuangHongLun 发表于 2019-10-31 15:56 | 显示全部楼层
四,其实STM32自带空闲中断检测
819239-20191014030514711-810568034.jpg



819239-20191014030642732-1521405694.jpg



819239-20191014030718580-932221251.jpg



819239-20191014030739780-468468910.jpg



819239-20191014030800065-263356152.jpg

 楼主| HuangHongLun 发表于 2019-10-31 15:57 | 显示全部楼层
五,测试
819239-20191014030822904-1085719641.jpg



STM32自带的串口空闲中断判断的相当及时!所以我不用它!因为很多时候我需要动态的空闲时间.

注:上面方案并不是最优的方式,但是适用于所有的单片机

我的想法是
发送数据采用   内存管理+DMA

每次发送的数据通过内存管理API放到内存里面,放入以后就查看一下以前的数据是不是发送完了,如果发送完了就重新配置下DMA

同时开启DMA发送完成中断,DMA发送完成中断里面也要判断内存里面有没有需要发送的数据,有的话就重新配置DMA,


说完发送,再说接收
我的想法是
数组+DMA+串口空闲中断/定时器


串口空闲中断和定时器的作用都是判断接收到一条完整的数据,空闲中断好说,直接在里面写标志就可以。
如果用定时器就是定时器里面获取DMA接收的数据个数(DMA有API可以获取),如果接收的数据个数在一定时间内不再改变,则置位标志,复位DMA.


当然如果为了预防处理慢,接收快的问题,加入内存管理。
内存管理+DMA+串口空闲中断

drer 发表于 2019-11-13 10:32 | 显示全部楼层
非常感谢分享
gwsan 发表于 2019-11-13 10:55 | 显示全部楼层
非常不错的资料
kxsi 发表于 2019-11-13 11:31 | 显示全部楼层
非常不错的资料
nawu 发表于 2019-11-13 11:44 | 显示全部楼层
非常不错的资料
qcliu 发表于 2019-11-13 11:59 | 显示全部楼层
非常不错的资料
tfqi 发表于 2019-11-13 12:42 | 显示全部楼层
非常不错的资料
wiba 发表于 2019-11-13 12:52 | 显示全部楼层
非常不错的资料
zljiu 发表于 2019-11-13 13:01 | 显示全部楼层
非常感谢楼主分享
honeybear123 发表于 2019-11-26 11:04 | 显示全部楼层
写的不错,值得学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

440

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部