历史上的今天
今天是:2024年08月29日(星期四)
2019年08月29日 | STM32F429 >> 9. USART_串口通讯
2019-08-29 来源:eefocus
本工程板级支持包文件适用于野火stm32f429 开发板。
串口通讯是一种设备间常用的串行通讯方式
通讯协议基本分为物理层和协议层:
物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体间的传输;
协议层:主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
物理层
主要分析RS-232

该通讯方式中,两个通讯设备的“DB9接口” 之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准” 传输数据信号。由于RS-232 电平标准的信号不能直接被控制器识别,所以这些信号会经过一个“电平转换芯片” 转换成控制器能够识别的“TTL校准” 的电平信号,才能实现通讯。
1. 电平标准
根据通讯使用的电平标准不同,串口通讯可分为TTL 标准及RS-232 标准


常使用MA3232 芯片对TTL 及RS-232 电平的信号进行相互转换
2. RS-232 信号线
RS-232 串口标准在最初的应用当中常用于计算机、路由与调制解调器之间的通讯,该通讯系统中,设备被分为数据终端设备DTE(计算机、路由) 和数据通讯设备DCE(调制解调器)。



协议层
串口通讯的数据包由发送设备通过自身的TXD 接口传输到接收设备的RXD 接口。
在串口通讯的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据

1. 波特率
异步通讯中由于没有时钟信号,固两个通讯设备间需约定好波特率,常见有4800、9600、115200 等
2. 通讯的起始和停止信号
数据包的起始信号由一个逻辑0 的数据位表示,而数据包的停止信号可由0.5、1、1.5 或两个逻辑1 的数据位表示,只要双方约定一致即可
3. 数据校验
可选。其有奇校验、偶校验、0校验、1校验和无校验
STM32 的USART 简介
STM32 芯片具有多个USART(Universal Synchronous Asynchronous Receiver and Transmitter )外设用于串口通讯,即通用同步异步收发器。
除了USART,它还有UART(Universal Asynchronous Receiver and Transmitter),即通用异步收发器,即通信时不需要对外提供时钟输出。
我们平时用的串口通信基本都是UART
USART 功能框图

1. 功能引脚
TX:发送数据输出引脚;
RX:接收数据输入引脚;
SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚;
nRTS:请求以发送(Request To Send),n 表示低电平有效。如果使能 RTS 流控制,当 USART 接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时, nRTS将被设置为高电平。该引脚只适用于硬件流控制;
nCTS:清除以发送(Clear To Send),n表示低电平有效。如果使能 CTS流控制,发送 器在发送下一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为 高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制;
SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式;
STM32F42xxx 系统控制器有四个 USART和四个 UART,其中 USART1 和 USART6 的
时钟来源于 APB2总线时钟,其最大频率为 90MHz,其他六个的时钟来源于 APB1总线时
钟,其最大频率为 45MHz。
UART只是异步传输功能,所以没有 SCLK、nCTS和 nRTS 功能引脚。
2. 数据寄存器
USART 数据寄存器(USART_DR)只有低 9位有效,并且第 9位数据是否有效要取决于 USART 控制寄存器 1(USART_CR1)的 M位设置,当 M 位为 0时表示 8 位数据字长,当 M
位为 1 表示 9 位数据字长,我们一般使用 8位数据字长.
USART_DR包含了已发送的数据或者接收到的数据。USART_DR 实际是包含了两个
寄存器,一个专门用于发送的可写 TDR,一个专门用于接收的可读 RDR。当进行发送操
作时,往 USART_DR 写入数据会自动存储在 TDR内;当进行读取操作时,向 USART_DR
读取数据会自动提取 RDR数据。
TDR 和 RDR 都是介于系统总线和移位寄存器之间。串行通信是一个位一个位传输的,
发送时把 TDR内容转移到发送移位寄存器,然后把移位寄存器数据每一位发送出去,接收
时把接收到的每一位顺序保存在接收移位寄存器内然后才转移到 RDR。
3. 控制器
USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。
使用 USART 之前需要向 USART_CR1寄存器的 UE位置 1 使能 USART。发送或者接收数
据字长可选 8位或 9位,由 USART_CR1的 M位控制。
发送器
当 USART_CR1 寄存器的发送使能位 TE置 1时,启动数据发送,发送移位寄存器的
数据会在 TX 引脚输出,如果是同步模式 SCLK也输出时钟信号。
一个字符帧发送需要三个部分:起始位+数据帧+停止位。起始位是一个位周期的低电
平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8位或 9位数据,数据是从
最低位开始传输的;停止位是一定时间周期的高电平。
停止位时间长短是可以通过 USART控制寄存器 2(USART_CR2)的 STOP[1:0]位控制,
可选 0.5个、1 个、1.5 个和 2个停止位。默认使用 1 个停止位。

当发送使能位 TE 置 1 之后,发送器开始会先发送一个空闲帧(一个数据帧长度的高电平),接下来就可以往 USART_DR寄存器写入要发送的数据。在写入最后一个数据后,需要等待USART状态寄存器(USART_SR)的 TC 位为 1,表示数据传输完成,如果USART_CR1寄存器的 TCIE位置 1,将产生中断。
发送数据时,有几个比较重要的标志位:

接收器
如果将 USART_CR1 寄存器的 RE 位置 1,使能 USART接收,使得接收器在 RX 线开始搜索起始位。在确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器数据移到 RDR内,并把 USART_SR 寄存器的 RXNE 位置1,同时如果 USART_CR2 寄存器的 RXNEIE 置 1的话可以产生中断。
接收数据时,有几个比较重要的标志位:

采样:
为得到一个信号真实情况,需要用一个比这个信号频率高的采样信号去检测,称为过采样,这个采样信号的频率大小决定最后得到源信号准确度,一般频率越高得到的准确度越高,但为了得到越高频率采样信号越也困难,运算和功耗等等也会增加,所以一般选择合适就好。
接收器可配置为不同过采样技术,以实现从噪声中提取有效的数据。
USART_CR1 寄存器的 OVER8 位用来选择不同的采样采样方法,如果 OVER8 位设置为 1 采用 8 倍过采样,即用 8 个采样信号采样一位数据;如果 OVER8 位设置为 0 采用 16 倍过采样,即用 16个采样信号采样一位数据。
USART 的起始位检测需要用到特定序列。如果在 RX线识别到该特定序列就认为是检
测到了起始位。起始位检测对使用 16倍或 8 倍过采样的序列都是一样的。该特定序列为:
1110X0X0X0000,其中 X表示电平任意,1或 0皆可。
8 倍过采样过程见图。使用第 4、5、6 次脉冲的值决定该位的电平状态。

16 倍过采样过程见图。

4. 小数波特率生成

f PLCK 为 USART 时钟;
OVER8为 USART_CR1 寄存器的 OVER8
位对应的值;
USARTDIV 是一个存放在波特率寄存器(USART_BRR)的一个无符号定点数。
5. 校验控制
当使用校验位时,串口传输的长度将是 8位的数据帧加上 1位的校验位总共 9 位,此时 USART_CR1 寄存器的 M位需要设置为1,即 9 数据位。
将 USART_CR1 寄存器的 PCE 位置 1 就可以启动奇偶校验控制,奇偶校验由硬件自动完成。
启动了奇偶校验控制之后,在发送数据帧时会自动添加校验位,接收数据时自动验证校验位。接收数据时如果出现奇偶校验位验证失败,会见 USART_SR 寄存器的 PE位置 1,并可以产生奇偶校验中断。
使能了奇偶校验控制后,每个字符帧的格式将变成:起始位+数据帧+校验位+停止位。
6. 中断控制
USART 有多个中断请求事件
中断事件 事件标志 使能控制位
发送数据寄存器为空 TXE TXEIE
CTS 标志 CTS CTSIE
发送完成 TC TCIE
准备好读取接收到的数据 RXNE RXNEIE
检测到上溢错误 ORE RXNEIE
检测到空闲线路 IDLE IDLEIE
奇偶校验错误 PE PEIE
断路标志 LBD LBDIE
多缓冲通信中的噪声标志、上溢错误和帧错误 NF/ORE/FE EIE
编程要点:
使能USART 的GPIO端口,配置成复用模式,并将端口复用配置成相应的USART 发送接收端口;
开启USART 对应GPIO 时钟和USART 时钟;
配置USART 寄存器,并使能;
配置NVIC,中断源选择为USART 中断源;
使能USART 中断;
使能USART ;
编写相应中断函数;
注意:
当将printf, scanf 和getchar 函数重定向后,魔术棒中必须配置use micro lib
配置GPIO 和USART 时必须使用"." 对结构体进行配置,不能使用“->” 否则不能成功配置,至于为什么,我也没有搞清楚,希望大家能告诉我
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 12月7日消息,上海芯片企业深迪半导体宣布,国内第一款具有中国自主知识产权的商用MEMS陀螺仪诞生,这是国内首颗手机传感器芯片,将改变我国手机MEMS陀螺仪完全从国外进口的历史。 中 ...… 查看全部问答> |
|
我现在需要工控机(IPC)控制30个继电器并行工作,要求延时精度在1毫秒, windows够精度的方法都太耗资源,不能同时开30个,只好想办法硬件解决…… 不知道有没有这类现成的继电器输出板卡可以选? 另外单片机最多有内置多少个定时器的?或者只 ...… 查看全部问答> |
|
使用430F437发现32K晶体起振速度很慢,引起LCD显示开机不正常。 使用430F437发现32K晶体起振速度很慢,引起LCD显示开机不正常。 是什么原因引起的,我怎么改电容都不行啊。… 查看全部问答> |
|
用LM3s9b96自己画了块板子,使用了一块240*400的TFT LCD。已经将grlib 的 Displaydriver 层修改好,现在调用displaydriver层或者graphics primitives层的函数均可正常使用。对于widget层,如果widget tree结构<3可以正常工作,再多则出问题,贴下 ...… 查看全部问答> |
|
sitara 板子已收到,还没拆开看,晚上上图 ___________________________________________________ 对不住大家了,晚上光线不好,照了几张惨不忍睹,就不上传了。 屏幕色彩不太好,其他都很不错。 [ 本帖最后由 lcofjp 于 2012-11-20 19:50 编辑 ...… 查看全部问答> |
|
先看一下电脑的“系统资源”是多少,右键单击“我的电脑”,选择“属性”,再选择“性能”,看一下“系统资源”是多少,一般应该达到95%左右还差不多。 1、电脑桌面上的东西越少越好,我的电脑桌面上就只有“我的电脑”和“回收站”。东西 ...… 查看全部问答> |
|
[Linux资料]Linux驱动程序工作原理简介 Linux驱动程序工作原理简介 一、linux驱动程序的数据结构 1 二、设备节点如何产生? 2 三、应用程序是如何访问设备驱动程序的? &n ...… 查看全部问答> |




