你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32串口通讯接收发送设计经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-26 15:00
STM32串口通信可以分为查询,中断,DMA三种方式进行通讯,本文主要就中断的方式进行讲解。采用中断的方式进行通讯时,可以使能接受非空中断(RXNE),当接收到一个数据时就产生一个中断,将接收到的数据通过移位寄存器移位到RDR中,此时我们可以直接将接收到的数据发送出去,则完成了一个字符的通讯,以后每次接收到一个数据就发送一个数据出去,如此便实现了接收到什么数据便发送什么数据的功能。而本文将要讨论先将其他设备发送来的数据全部接收完成,再将一整帧的数据发送出去的通讯方法。(串口通讯原理图如下)
. @2 p3 [7 @5 f0 O% A  E$ B
! Y0 g4 ^& N; L+ H  C
0b44a37685384e36957cf7eba071287e.png
8 [# [' w0 A3 C4 t# C
8 {0 H" V7 U$ B* F9 F  }1 Y2 V
方法一:采用定时器的方法判断一组数据帧是否接收完成。在接收到第一个字符时打开定时器,在持续接收到数据时不断更新定时器的值,当没有接收到数据时,定时器的值不再更新,会产生超时溢出,触发溢出中断,从而判断一组数据帧接收完成(注:定时器的值要设置合理,不能大于两组数据帧发送之间的间隔,如采用modbus协议时3.5个字符的时长;也不能小于两个发送字符之间的时长)。具体操作如下:首先根据波特率计算定时器设置的一个具体时间,在串口中断中接收到第一个字符开启定时器,并在每一次接收到数据进入串口中断时将定时器的计数清零,若定时器达到我们设置的时间便认为一个数据帧接收完成。% Q7 @- P; t+ ?3 ]9 ]" z2 X

1 V$ p6 F, d0 `0 A  K1 }
7 E/ g8 @; l) i2 \
方法二:通过对数据帧的帧尾进行判断来识别一组数据帧是否接收完成;因为在电脑上按下回车键或发送新行,帧尾会出现0x0A,0X0D这两个,我们只要判断是否连续出现0A,0D便可判断一组数据帧是否传输完成。* a" p. H. T; S6 l: k4 ^. J/ w, a
: n* k' `; X1 G/ B3 R" `5 l$ J
# D2 ?% }7 b$ _8 O$ t# m1 V" v
方法三:采用STM32自带的空闲中断(IDLE)来判断一组数据帧是否接收完成;首先,在串口初始化中使能空闲中断(IDLE),再在中断服务函数中判断中断标志位(USART_FLAG_IDLE)(这里只能用中断标志位来判断而不是中断,具体原因还未查清,实操是不行),当标志位置位时,将接收到的一帧数据发送出去。另外,空闲标志位只有在RXNE再次置1时才能使能(注意,USART_FLAG_IDLE的判断在中断服务函数中,但是需要在清除RXNE标志位之后判断)。空闲标志位必须采用先读状态寄存器,再读数据寄存器才可以清除,不能采用普通的调用清除函数来清除。具体操作代码如下:9 ]0 o* F% G# m+ p( P* U
5 T" `* L) J; k
eeffceeeaf944d42b227edd2e156e496.png
6 h' Y8 _4 o' [  [8 L
# H6 r" q' I/ h; R, P
RXNE中断和IDLE中断的区别:
( N2 N1 v6 U6 v$ U, G3 u, k! X% K当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给STM32一次性发送了10个字节,就会产生10次RXNE中断,1次IDLE中断。
' l( V7 X5 H8 O
% ~# f! }+ r, |& S6 I8 D# T
总的来说,这三种方式都可以实现接收不定长的数据帧,接收完成,再发送的功能,但是相对来说第三种方式比较推荐,操作起来简单,且不需要占用定时器资源,另外,对于第二种方法,对从传感器接收来的数据就不太适用,可能你没办法获得其具体的数据帧格式,如此通过帧尾来判断的方法就不太适用了。相对比来说,方法三,采用空闲中断(IDLE)的方式适用性较好。
6 K( H# r+ n2 Q; m  X————————————————
( T/ k! k6 P7 P% }* C版权声明:jj198311如有侵权请联系删除0 u, r4 l% i$ [: [  u0 i- D

1 P6 N: m* m9 L# F5 z! K+ _8 V- N8 f: T
赞 收藏 评论0 发布时间:2023-3-26 15:00

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版