您的位置 首页 嵌入式

STM32 根据串口RS485双机通讯原理浅析

RS485通信想必大家都知道,在学习RS232时,都会拿485(RS485下文就用485代替)和其作对比。485优缺点不说,网上有我用的是STM32库函数学的485通信,所以接下来就讲讲STM

  RS485通讯想必咱们都知道,在学习RS232时,都会拿485(RS485下文就用485替代)和其作比照。485优缺点不说,网上有

  我用的是STM32库函数学的485通讯,所以接下来就讲讲STM32串口完结485双机通讯的原理:

  485和232都是根据串口的通讯接口,在数据的收发操作上都是共同的。可是他两的通讯形式却大不相同~!232是全双工(例:A->B的一起B->A,瞬时同步)作业形式,而485是半双工(发时不能收,收时不能发)作业形式。在232通讯中,主机在发送数据的一起能够收到从机发过来的数据;但在485通讯中,收发要经过形式位的切换来进行,比如,发送数据时,会把形式为置‘1’,表明为发送形式,此刻不能接纳;当接纳数据时,会把形式方位‘0’,表明为接纳形式,此刻不能发送。

  在讲STM32串口完结485双机通讯的原理之前,先来温习一下串口中的中止知识点:

  串口的中止类型有很多种。这儿主要讲两种:接纳到数据中止和发送数据完结中止。这两个中止跟两个标志位有密切关系:RXNE(读数据寄存器非空)和TC(发送完结)。比如在接纳到数据的时分(RXNE,读数据寄存器非空),咱们要发生中止。在发送数据完毕的时分(TC,发送完结)要发生中止。这两种中止的发生办法都是在敞开串口中止函数(USART_ITConfig();)中装备。并在获取中止状况函数(USART_ITStatus();)中判别是发送中止仍是承受中止。

  留意:1、有人问当发生接纳中止时,没看到程序中铲除中止标志啊,那不就一向中止下去了吗?这儿官方规则有两种办法铲除中止标志(书里边也有):1、赶快读取USART_DR(数据寄存器),经过读USART_DR能够将该位清零;2、能够直接向该位写‘0’,直接清零。

  2、两块板子的串口波特率一定要相同,不然将得不到想要的数据。

  STM32串口完结485双机通讯的原理(库函数):

  1、在主函数中,扫描按键。一旦key0按下,首先将5个字节的数据存入rs485buf[]数组中,然后调用RS485_Send_Data(rs485buf,5);函数将5个字节的数据发送到串口。

 

  2、进入RS485_Send_Data();函数中,先经过标志位将485设置为发送形式(RS485_TX_EN=1),然后循环5次,将这5个字节数据,经过库函数:USART_Send_Data();发送到USART_DR寄存器(主动发送),最终经过标志位将485设置为接纳形式(RS485_TX_EN=0)。

    

 

  3、前两个是发送。现在是接纳了。主函数中经过RS485_Receive_Data();不断的接纳。

  4、进入RS485_Receive_Data();函数中,

  假如一向没有按按键,则不会发送数据,也就不会发生接纳中止,也就不会往咱们界说的接纳缓冲区(RS485_RX_BUF[64])里写数据。RS485_RX_CNT计数器的值也便是‘0’,对应在RS485_Receive_Data();函数中就不会进入里边的if句子(下图中红框)

    

  假如按键按下了,就会发送数据,就会发生接纳中止,就会往咱们界说的接纳缓冲区(RS485_RX_BUF[64])里写数据,RS485_RX_CNT计数器的值也就开始自增,对应在RS485_Receive_Data();函数中就会进入里边的if句子,从之前界说的接纳缓冲区(RS485_RX_BUF[64])里边取数据。

  5、最终就将取出来的数据(接纳到的数据)显示出来。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/183864.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部