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();)中判断是发送中断还是接受中断。
注意:
01、有人问当产生接收中断时,没看到程序中清除中断标志啊,那不就一直中断下去了吗?这里官方规定有两种方法清除中断标志(书里面也有):1、尽快读取usart_dr(数据寄存器),通过读usart_dr可以将该位清零;2、可以直接向该位写‘0’,直接清零。02、两块板子的串口波特率一定要相同,否则将得不到想要的数据。
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、最后就将取出来的数据(接收到的数据)显示出来。
玩手机游戏不卡顿 骁龙855 Plus助力高帧率游戏体验
tpu是什么材料_tpu硬度范围_tpu的应用
土耳其货币崩溃,加密货币为何无法拯救?
物联网将加速推动医疗领域转型升级
织物折皱回复性试验仪的用途以及主要特点
STM32串口实现485双机通信的原理
什么是超级终端_超级终端是干什么用的
调查显示:消费者愿意多支付20%的费用来购买5G智能手机
新思科技完善软件安全计划并已经迎来了第11个版本
基于MPLS的VPN技术原理及其实现
CAN采用了隔离依旧通讯异常怎么办?
iPhone8若推迟上市,背后也许有人在叫好
比特币涨势猛然熄火_51天蒸发1.4万亿
台积电否认苹果砍掉部分5nm A14芯片订单
C语言编程中main()函数退出之后程序去哪儿了
华为鲲鹏携手同创永益共同打造容灾运营管理领域技术生态
小米6或将搭载骁龙835处理器 不愧为性价比之王!
智能门铃2已在小米商城正式开启众筹众筹价为179元
任正非:正确地估计自己,人生要有满足感
简单分析GPU与CPU在绘图处理方式的优缺点