STM32 基于串口RS485双机通信原理浅析

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、最后就将取出来的数据(接收到的数据)显示出来。
博主不才,大牛不喜勿喷哦~!
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32是一款非常强大的微控制器系列,它在硬件上具有丰富的外设资源,包括SPI(串行外设接口)。SPI是一种常用的通信协议,可以用于多种应用,包括双机通信。 SPI通信可以在STM32的不同引脚之间建立起一个主从关系。主设备(通常是STM32控制整个通信过程,而从设备则根据主设备的指令进行数据传输。通过配置SPI相关寄存器,可以设置数据传输的速率、数据位数和时钟极性等参数,以满足特定通信需求。 在双机通信中,可以使用两个STM32控制器作为主设备和从设备,通过SPI接口进行通信。主设备可以发送指令或数据给从设备,从设备则可以将数据发送回主设备。这种通信方式可以实现高速的数据传输和双向通信,可广泛应用于许多应用场景。 在使用SPI进行双机通信时,需要注意以下几点: 1. 确保主从设备的SPI接口设置一致,包括传输速率、时钟极性和相位等参数。 2. 设计合适的通信协议,包括数据帧结构和数据解析规则,以确保数据的可靠传输。 3. 考虑通信的实时性和可靠性,可以使用中断或DMA方式进行数据传输,以减少处理器的负载。 综上所述,STM32可以使用SPI进行双机通信,通过配置合适的SPI参数和设计合理的通信协议,可以实现高效可靠的数据传输。 ### 回答2: STM32是一款广泛应用于嵌入式系统开发的微控制器系列,它内置了丰富的外设接口,包括SPI(串行外设接口)。SPI通信是一种基于主从模式的串行通信协议,用于在多个设备间进行双向通信。 因此,STM32完全支持使用SPI接口进行双机通信。通过配置STM32的SPI外设作为主设备和从设备,可以实现多个STM32之间的通信。主设备负责控制通信的时序和传输数据,从设备负责接收和发送数据。 在SPI通信中,主设备通过发送时钟信号(SCLK)、主设备输出数据(MOSI)和接收从设备数据(MISO)的方式与从设备进行通信。通过在SPI配置中设置一些参数(如时钟频率、数据位数等),可以实现数据的高效传输和同步。 当然,为了确保双机通信的稳定性和可靠性,还需要在硬件电路、软件驱动等方面进行适当的设计和配置。例如,需要确保主设备和从设备的时钟信号、数据线的连接正确可靠;还需要编写相应的软件驱动程序,实现SPI通信的初始化、数据发送和接收等功能。 总之,STM32可以完全使用SPI进行双机通信,通过合适的硬件和软件配置,可以实现多个STM32之间的高效数据传输和通信。 ### 回答3: STM32可以使用SPI进行双机通信。 SPI(Serial Peripheral Interface)是一种同步串行通信协议,适用于短距离高速数据传输。STM32控制器内部集成了多个SPI接口,可以用于与其他硬件设备进行通信。 要实现双机通信,至少需要两个STM32控制器。其中一个控制器设为主设备(master),另一个设为从设备(slave)。主设备负责调度通信的时序并发起通信操作,从设备则按照主设备的时序进行响应。通过SPI接口连接两个设备,可以实现双机之间的通信。 在SPI通信中,主设备和从设备之间可以交换数据,主设备将待发送的数据放入发送缓冲区,然后通过时钟信号将数据发送给从设备。从设备收到数据后,将其放入接收缓冲区,供主设备读取。通信完成后,两个设备可以交换角色,实现双向通信。 通过SPI接口进行双机通信的好处是,通信速率高、传输可靠、占用的引脚少等。但也需要注意SPI的时序设置、数据格式等方面的配置,确保两个设备之间的通信正常进行。 总之,STM32可以使用SPI接口进行双机通信,适用于短距离高速数据传输的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值