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

发布者:EnchantedMelody最新更新时间:2017-09-22 来源: eefocus关键字: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、最后就将取出来的数据(接收到的数据)显示出来。


关键字:STM32  串口  RS485  双机通信 引用地址:STM32 基于串口RS485双机通信原理浅析

上一篇:STM32 CAN总线标识符过滤器难点解析
下一篇:STM32 SPI难点浅析

推荐阅读最新更新时间:2024-03-16 15:37

STM32 FLASH读、写、擦除
编译环境:我用的是(Keil)MDK4.7.2 stm32库版本:我用的是3.5.0 一、本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料。   对STM32 内部FLASH进行编程操作,需要遵循以下流程:   FLASH解锁   清除相关标志位   擦除FLASH(先擦除后写入的原因是为了工业上制作方便,即物理实现方便)   写入FLASH   锁定FLASH 实例: #define FLASH_PAGE_SIZE ((uint16_t)0x400) //如果一页为1K大小 #define WRITE_START_ADDR ((uint32_t)0x08008000)//写入的起始地址 #define W
[单片机]
<font color='red'>STM32</font> FLASH读、写、擦除
使用74LS164将C8051F的串口输出扩为并口输出
系统功能 使用74LS164将AVR的串口输出扩为并口输出。 硬件设计 串行输出扩展为并行输出芯片74LS164控制电路原理图 软件设计 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! //目标系统: 基于C8051F单片机 //应用软件: Silicon IDE / Keil /*01010101010101010101010101010101010101010101010101010101010101010101 ---------------------------------------------------------------------- 实验内容: 使用P2口的L
[单片机]
使用74LS164将C8051F的<font color='red'>串口</font>输出扩为并口输出
RS232 RS485接口原理图
R4 R5一般取20K R2 一般取5.1K
[模拟电子]
RS232 <font color='red'>RS485</font>接口原理图
stm32在IAR中如何生成hex文件
1在工程选项options里面, 2选中output converter选项, 3勾中Generate additional output选项 4在Output format 里选中Intel extended选项 5在Output file 下面勾上Override default就完成 然后在Exe文件夹里就有×××.hex。 以上步骤如下图
[单片机]
<font color='red'>stm32</font>在IAR中如何生成hex文件
基于STM32跑步路径记录
随着 科技 不断进步, 电子 化设备不断进入涌入我们的日常生活。生活水平的提高,各项健身运动应运而生,然后,健身运动不能盲目进行,科学的健身方式才能有效的提升我们自身的身体素质。 现如今各自手环手表的出现, 通过 智能 手环,用户可以记录日常生活中的锻炼、睡眠、部分还有饮食等实时数据,并将这些数据与 手机 、平等同步,起到通过数据指导健康生活的作用。 智能手环作为可穿戴设备,其功能还是比较强大的,其开发涉及智能手环 MCU 数据指令到 蓝牙 IC 的传输、蓝牙到APP的数据 通信 协议、APP到手机内部的通信调试逻辑实现、APP数据到云端服务器的数据库 算法 设计等一系列的开发。支持多种运动监控模式,可以实时监控身体的各项性能
[单片机]
基于<font color='red'>STM32</font>跑步路径记录
STM32 启动过程简述
根据启动模式分析的结论: 1、 通过boot引脚设置可以将中断向量表定位于SRAM区,即起始地址为0x02000000,同时复位后PC指针位于0x02000000处; 2、 通过boot引脚设置可以将中断向量表定位于FLASH区,即起始地址为0x08000000,同时复位后PC指针位于0x08000000处; 3、 通过boot引脚设置可以将中断向量表定位于内置Bootloader区,本文不对这种情况做论述; STM32 将0x8000000 映射到 0x00000000,即如果从内部FLASH启动,会从 0x08000004 处进行取指令 (CM3定义的 0x08000000 用于存放SP指针),故,0x00000000 与
[单片机]
基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数
经本人刻苦钻研,将51单片机上用的矩阵键盘扫描程序移植到了stm32上,同时也做了很大的改进,最大的改进莫过于消抖这块了。以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序被搁置,显然,程序的实时性大打折扣,今天便在此让新手们别delay,从此走进一个崭新的扫描消抖世界!(本人也是新手——爱钻研的新手哈!^_^) //stm32矩阵键盘翻转扫描法(PB口的低8位) //将此矩阵键盘扫描程序放在定时器中断服务程序里 //每10ms进入一次中断服务程序 s8 scan_MatrixKey(void) { #define PORT GPIOB- IDR u8 colum
[单片机]
STM32开发 -- 外部中断详解
在讲三轴加速度计的时候,提到外部中断。接下来就看看中断为什么这么配置。 一、外部中断概述 STM32的每个IO都可以作为外部中断输入。 那我们之前讲过的,参看:STM32开发 – GPIO详解 STM32F105RC 一共有4组IO口 一共16X3+3=51个IO GPIOA0~A15 GPIOB0~B15 GPIOC0~C15 GPIOD0~D2 那么它跟中断的关系是什么呢? STM32的中断控制器支持19个外部中断/事件请求: 从图上来看,GPIO 的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0 ~ 15。 另外四个EXTI线的连接方式如下: ● EXTI线16
[单片机]
<font color='red'>STM32</font>开发 -- 外部中断详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved