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

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

[复制链接]
攻城狮Melo 发布时间:2023-3-26 15:00
STM32串口通信可以分为查询,中断,DMA三种方式进行通讯,本文主要就中断的方式进行讲解。采用中断的方式进行通讯时,可以使能接受非空中断(RXNE),当接收到一个数据时就产生一个中断,将接收到的数据通过移位寄存器移位到RDR中,此时我们可以直接将接收到的数据发送出去,则完成了一个字符的通讯,以后每次接收到一个数据就发送一个数据出去,如此便实现了接收到什么数据便发送什么数据的功能。而本文将要讨论先将其他设备发送来的数据全部接收完成,再将一整帧的数据发送出去的通讯方法。(串口通讯原理图如下)6 x! T; B- ?& p) v
2 `0 Z2 ?8 ~+ r4 b
0b44a37685384e36957cf7eba071287e.png
+ X# l$ N! l" X5 i% B6 ]+ r
  f; b+ C! b7 X( V. w# |
方法一:采用定时器的方法判断一组数据帧是否接收完成。在接收到第一个字符时打开定时器,在持续接收到数据时不断更新定时器的值,当没有接收到数据时,定时器的值不再更新,会产生超时溢出,触发溢出中断,从而判断一组数据帧接收完成(注:定时器的值要设置合理,不能大于两组数据帧发送之间的间隔,如采用modbus协议时3.5个字符的时长;也不能小于两个发送字符之间的时长)。具体操作如下:首先根据波特率计算定时器设置的一个具体时间,在串口中断中接收到第一个字符开启定时器,并在每一次接收到数据进入串口中断时将定时器的计数清零,若定时器达到我们设置的时间便认为一个数据帧接收完成。
: x1 r9 J$ Q4 z6 o* t# Z+ t4 L4 ^/ I" E& O

* z! ~' n, Y  r) F4 }) C( k' P方法二:通过对数据帧的帧尾进行判断来识别一组数据帧是否接收完成;因为在电脑上按下回车键或发送新行,帧尾会出现0x0A,0X0D这两个,我们只要判断是否连续出现0A,0D便可判断一组数据帧是否传输完成。6 ^, j  F2 W, f! |  w! b; E
2 E7 F0 O* K& I

6 y+ H6 }3 E. i$ n2 ^' x: ^/ `方法三:采用STM32自带的空闲中断(IDLE)来判断一组数据帧是否接收完成;首先,在串口初始化中使能空闲中断(IDLE),再在中断服务函数中判断中断标志位(USART_FLAG_IDLE)(这里只能用中断标志位来判断而不是中断,具体原因还未查清,实操是不行),当标志位置位时,将接收到的一帧数据发送出去。另外,空闲标志位只有在RXNE再次置1时才能使能(注意,USART_FLAG_IDLE的判断在中断服务函数中,但是需要在清除RXNE标志位之后判断)。空闲标志位必须采用先读状态寄存器,再读数据寄存器才可以清除,不能采用普通的调用清除函数来清除。具体操作代码如下:
8 X+ {" d) f! R5 e  s9 h% d* J
7 ~1 [: H" g) l' M' Q9 A8 P/ w
eeffceeeaf944d42b227edd2e156e496.png
) z6 C& v- O; V2 c1 D" K( i$ s+ u9 w7 H- t& z2 W" d! i
RXNE中断和IDLE中断的区别: $ u: v& S; [) B2 S* K( U, m
当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给STM32一次性发送了10个字节,就会产生10次RXNE中断,1次IDLE中断。
% l5 j6 v+ f/ Y  J6 s% S, J8 k% m
6 d- `1 D4 n1 Z6 j
总的来说,这三种方式都可以实现接收不定长的数据帧,接收完成,再发送的功能,但是相对来说第三种方式比较推荐,操作起来简单,且不需要占用定时器资源,另外,对于第二种方法,对从传感器接收来的数据就不太适用,可能你没办法获得其具体的数据帧格式,如此通过帧尾来判断的方法就不太适用了。相对比来说,方法三,采用空闲中断(IDLE)的方式适用性较好。: N" f/ e# I  u5 {# Z& p5 |
————————————————" B9 a( S+ Z$ m6 I
版权声明:jj198311如有侵权请联系删除
* t/ s  K1 w5 a! @$ \
5 F" r8 f; v# l. o3 S& ?) N. T
/ e8 w; N% T1 c6 Q& D
收藏 评论0 发布时间:2023-3-26 15:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版