谁有好用的stm32 串口 中断 接收数据的程序,求大神分享,感激不尽。 50

程序要求:1、具有通用性,无论数据有无帧头或帧尾都能正确接收,长度不一的数据也能正确接收;2、能计算接收到不定长数据的长度;3、有接收超时判断,保证正确接收一帧数据,两帧... 程序要求:1、具有通用性,无论数据有无帧头或帧尾都能正确接收,长度不一的数据也能正确接收;2、能计算接收到不定长数据的长度;3、有接收超时判断,保证正确接收一帧数据,两帧数据不会混到一起。 展开
 我来答
1056648799
2016-11-23 · TA获得超过2839个赞
知道大有可为答主
回答量:1394
采纳率:98%
帮助的人:697万
展开全部
我这里倒是有这样的程序,但因为涉及到公司机密,不方便直接拿出来,我就给你说说程序流程吧,有流程了,很好写的。
我给你说一下性能,无需帧头尾,长度可变(但不能超过你设置的最大长度),有超时判断(就是用来断帧的),带CRC校验。
需要两个中断,一个串口中断,一个定时中断。定时器一般是关闭的。串口的接受中断常开,在串口中断函数中,你先关闭定时器中断(不论之前的定时器有没有使能打开)每接受一个字节的数据,你都把数据依次放在数组A[]中(注意数据存放位置不断往后移动,可直接使用计数标志count作为下标要),顺便计数标志count加1,,在退出串口中断前,使能定时中断(当然要重新加载计时数据),一般几个ms就好了,让定时器跑起来。
在定时器中断函数中,你首先要把自己这个定时器暂时关闭,转移数组A[]里面的数据和count计数,再把count计数清零就好了。当然在这个中断函数里面你也可以把数据校验CRC做了,顺便可以把你接受到的数据分个类什么的。
转移出来的数据你就可以直接用了,当然上述中的中断标志清除之类的 没说,另外,收到的数据处理的记得加一个标示清0,标示此次数据已经处理,这个标志位在定时中断里面重新置1.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式