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’,直接清零。
1、在主函数中,扫描按键。一旦key0按下,首先将5个字节的数据存入rs485buf[]数组中,然后调用RS485_Send_Data(rs485buf,5);函数将5个字节的数据发送到串口。
3、前两个是发送。现在是接纳了。主函数中经过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])里边取数据。