STM32-RS232串口通信(含代码) 一、UART通信 UART是Universal Asynchronous Receiver / Transmitter的缩写,意即通用异步串行通信接口,是最常用的通信技术之一,广泛用于设备与电脑之间、设备与设备之间、设备内部芯片与芯片之间的通信。以两个5V单片机芯片之间的UART串口通信为例,如图1所示:
波特率就是发送二进制数据位的速率,习惯上用baud表示,即发送一位二进制数据的持续时间=1/baud。在通信之前,单片机1和单片机2首先都要明确的约定好它们之间的通信波特率,必须保持一致,收发双方才能正常实现通信。 约定好速度后,还要考虑第二个问题,数据什么时候是起始,什么时候是结束呢?在UART通信的时候,一个字节是8位,规定当没有通信信号发生时,通信线路保持高电平,当要发送数据之前,先发一位0表示起始位,然后发送8位数据位,数据位是先低后高的顺序,数据位发完后再发一位1表示停止位。这样本来要发送一个字节的8位数据,而实际上一共发送了10位,多出来的两位其中一位起始位,一位停止位。而接收方呢,原本一直保持的高电平,一旦检测到了一位低电平,那就知道了要开始准备接收数据了,接收到8位数据位后,检测到停止位,再准备下一个数据的接收,如图2所示。
串口通信的接收过程: (异步通信:接收器和发送器有各自的时钟;同步通信:发送器和接收器由同一个时钟源控制。RS232是异步通信) (1)开始通信时,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对“接收时钟”计数。 (2)当计到8个时钟时,对输入信号进行检测,若仍为低电平,则确认这是“起始位”,而不是干扰信号。 (3)接收端检测到起始位后,隔16个接收时钟,对输入信号检测一次,把对应的值作为D0位数据。若为逻辑1, 作为数据位1;若为逻辑0,作为数据位0。 (4)再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据。….,直到全部数据位都输入。 (5)检测校验位P(如果有的话)。 (6)接收到规定的数据位个数和校验位后,通信接口电路希望收到停止位S(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志。若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中送数据输入寄存器。若校验错,在状态寄存器中置奇偶错标志。 (7)本幀信息全部接收完,把线路上出现的高电平作为空闲位。 (8)当信号再次变为低时,开始进入下一幀的检测。 二、RS232通信接口 TTL电平用于串口通信时,有3.3V和5V两个系列。由于电压范围小,所以抗干扰能力较弱,传输的具体不远,在9600波特率传输距离为2米,一般不超过15米。因为RS232电平是负逻辑,且电平值可以高达12V,最大传输距离可以达到十几米,而通常单片机引脚是兼容的TTL电平标准,那么RS232接口想要与单片机相连接,就需要用一个电平转换芯片(比如MAX232)来完成。
在关于串口通讯的叫法太多,什么RS232通讯、串口通讯、DB9通讯、UART通讯等等,随便怎么叫吧,理解就行。 串行通讯,从字面意思理解就行,就是把数据串成一串发出去,比如一个字节8位,高位先发出去,那么发送顺序就是bit7–bit6–bit5–bit4–bit3–bit2–bit1–bit0。 串口数据收发: 1、声明一个UART_HandleTypeDef结构 2、配置波特率、字符长度、停止位、校验位等 3、UART 管脚配置:配置管脚位置和时钟 4、UART初始化 5、开始发送数据
DMA配置
中断收发
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/83565.html