STM32F4学习笔记6——USART Part1

发布者:cloudsousou6最新更新时间:2017-09-20 来源: eefocus关键字:STM32F4  USART 手机看文章 扫描二维码
随时随地手机看文章

USART又叫通用同步异步收发器,塔提供了一种灵活的方法与工业使用标准NRZ异步春航数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范以及调制解调器(CTS/RTS)操作,它还允许多处理器通信,使用多换成器配置的DMA方式,可以实现高速数据通信。 
USART寄存器控制框图如下 
USART框图

可通过对 USART_CR1 寄存器中的 M 位进行编程来选择 8(置0) 位或 9(置1) 位的字长。TX 引脚在起始位工作期间处于低电平状态。在停止位工作期间处于高电平状态。 
空闲字符可理解为整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。 
停止字符可理解为在一个帧周期内接收到的电平均为“0”。发送器在中断帧的末尾插入 1 或 2 个停止位(逻辑“1”位)以确认起始位。 
发送和接收由通用波特率发生器驱动,发送器和接收器的使能位分别置 1 时将生成相应的发送时钟和接收时钟。 
USART字符说明

字符发送 
USART 发送期间,首先通过 TX 引脚移出数据的最低有效位。该模式下,USART_DR 寄存 器的缓冲区 (TDR) 位于内部总线和发送移位寄存器之间。 
每个字符前面都有一个起始位,其逻辑电平在一个位周期内为低电平。字符由可配置数量的停止位终止。 
USART 支持以下停止位:0.5(智能卡模式下接收数据使用)、1(默认)、1.(智能卡模式下发送与接收使用)5 和 2(正常USART模式,单线模式和调制解调器模式支持该值) 个停止位。 
注意:数据发送期间不应复位 TE 位。发送期间复位 TE 位会冻结波特率计数器,从而将损坏 TX 引 脚上的数据。当前传输的数据将会丢失。 
使能 TE 位后,将会发送空闲帧。

停止位的配置 
可配置的停止位 
步骤: 
1.通过向 USART_CR1 寄存器中的 UE 位写入 1 使能 USART。 
2. 对 USART_CR1 中的 M 位进行编程以定义字长。 
3. 对 USART_CR2 中的停止位数量进行编程。 
4. 如果将进行多缓冲区通信,请选择 USART_CR3 中的 DMA 使能 (DMAT)。按照多缓冲区 通信中的解释说明配置 DMA 寄存器。 
5. 使用 USART_BRR 寄存器选择所需波特率。 
6. 将 USART_CR1 中的 TE 位置 1 以便在首次发送时发送一个空闲帧。 
7. 在 USART_DR 寄存器中写入要发送的数据(该操作将清零 TXE 位)。为每个要在单缓 冲区模式下发送的数据重复这一步骤。 
8. 向 USART_DR 寄存器写入最后一个数据后,等待至 TC=1。这表明最后一个帧的传送已 完成。禁止 USART 或进入暂停模式时需要此步骤,以避免损坏最后一次发送。

单字节通信 
始终通过向数据寄存器写入数据来将 TXE 位清零。 
TXE 位由硬件置 1,它表示: 
● 数据已从 TDR 移到移位寄存器中且数据发送已开始。 
● TDR 寄存器为空。 
● USART_DR 寄存器中可写入下一个数据,而不会覆盖前一个数据。 
TXEIE 位置 1 时该标志位会生成中断。 
发送时,要传入 USART_DR 寄存器的写指令中存有 TDR 寄存器中的数据,该数据将在当 前发送结束时复制到移位寄存器中。 
未发送时,要传入 USART_DR 寄存器的写指令直接将数据置于移位寄存器中,数据发送开 始时,TXE 位立即置 1。 
如果帧已发送(停止位后)且 TXE 位置 1,TC 位将变为高电平。如果 USART_CR1 寄存器 中的 TCIE 位置 1,将生成中断。 
向 USART_DR 寄存器中写入最后一个数据后,必须等待至 TC=1,之后才可禁止 USART 或使微控制器进入低功率模式。 
TC 位通过以下软件序列清零: 
1.从 USART_SR 寄存器读取数据 
2. 向 USART_DR 寄存器写入数据 
注意:还可通过向 TC 位写入“0”将其清零。建议仅在多缓冲区通信时使用此清零序列。 
TC/TXE时序

中断字符 
将 SBK 位置 1 将发送一个中断字符。中断帧的长度取决于 M 位。(见上图USART字符说明) 
如果 SBK 位置“1”,当前字符发送完成后,将在 TX 线路上发送一个中断字符。中断字符 发送完成时(发送中断字符的停止位期间),该位由硬件复位。USART 在上一个中断帧的 末尾插入一个逻辑“1”位,以确保识别下个帧的起始位。 
注意:如果软件在中断发送开始前对 SBK 位进行了复位,将不会发送中断字符。对于两个连续的中 断,应在上一个中断的停止位发送完成后将 SBK 位置 1。

空闲字符 
将 TE 位置 1 会驱动 USART 在第一个数据帧之前发送一个空闲帧。(见上图USART字符说明)

字符接收(位数取决于M位) 
起始位检测 
无论设置为16 倍或 8 倍过采样时,起始位检测序列相同都以16倍过采样检测。 
在 USART 中,识别出特定序列的采样时会检测起始位。该序列为:1 1 1 0 X 0 X 0 X 0 0 0 0。 
起始位检测序列 
注意:如果序列不完整,起始位检测将中止,接收器将返回空闲状态(无标志位置 1)等待下降沿。 
如果 3 个采样位均为 0(针对第 3 位、第 5 位和第 7 位进行首次采样时检测到这 3 位均为 0; 针对第 8 位、第 9 位和第 10 位进行第二次采样时检测到这 3 位均为 0),可确认起始位 (RXNE 标志位置 1,RXNEIE=1 时生成中断)。 
如果两次采样时(对第 3 位、第 5 位和第 7 位进行采样以及对第 8位、第 9 位和第 10 位进 行采样),3 个采样位中至少有 2 个为 0,则可验证起始位(RXNE 标志位置 1,RXNEIE=1 时生成中断)但 NE 噪声标志位置 1。如果不满足此条件,则启动检测中止,接收器返回空 闲状态(无标志位置 1)。 
如果其中一次采样时(对第 3 位、第 5 位和第 7 位进行采样或对第 8 位、第 9 位和第 10 位 进行采样),3 个采样位中有 2 个为 0,则可验证起始位但 NE 噪声标志位置 1。

字符接收 
USART 接收期间,首先通过 RX 引脚移入数据的最低有效位。该模式下,USART_DR 寄存 器的缓冲区 (RDR) 位于内部总线和接收移位寄存器之间。 
步骤: 
1.通过向 USART_CR1 寄存器中的 UE 位写入 1 使能 USART。 
2. 对 USART_CR1 中的 M 位进行编程以定义字长。 
3. 对 USART_CR2 中的停止位数量进行编程。 
4. 如果将进行多缓冲区通信,请选择 USART_CR3 中的 DMA 使能 (DMAR)。按照多缓冲 区通信中的解释说明配置 DMA 寄存器。步骤 3 
5. 使用波特率寄存器 USART_BRR 选择所需波特率 
6. 将 RE 位 USART_CR1 置 1。这一操作将使能接收器开始搜索起始位。 
接收到字符时 
● RXNE 位置 1。这表明移位寄存器的内容已传送到 RDR。也就是说,已接收到并可读取数据(以及其相应的错误标志)。 
● 如果 RXNEIE 位置 1,则会生成中断。 
● 如果接收期间已检测到帧错误、噪声错误或上溢错误,错误标志位可置 1。 
● 在多缓冲区模式下,每接收到一个字节后 RXNE 均置 1,然后通过 DMA 对数据寄存器执行读操作清零。 
● 在单缓冲区模式下,通过软件对 USART_DR 寄存器执行读操作将 RXNE 位清零。RXNE标志也可以通过向该位写入零来清零。RXNE 位必须在结束接收下一个字符前清零,以避免发生上溢错误。 
注意:接收数据时,不应将 RE 位复位。如果接收期间禁止了 RE 位,则会中止接收当前字节。

中断字符 
接收到中断字符时,USART 将会按照帧错误对其进行处理。

空闲字符 
检测到空闲帧时,处理步骤与接收到数据的情况相同;如果 IDLEIE 位为 1,则会产生中断。

上溢错误 
如果在 RXNE 未复位时接收到字符,则会发生上溢错误。RXNE 位清零前,数据无法从移位 寄存器传送到 RDR 寄存器。 
每接收到一个字节后,RXNE 标志位都将置 1。当 RXNE 标志位是 1 时,如果在接收到下一 个数据或尚未处理上一个 DMA 请求时,则会发生上溢错误。发生上溢错误时: ● ORE 位置 1。 
● RDR 中的内容不会丢失。对 USART_DR 执行读操作时可使用先前的数据。 
● 移位寄存器将被覆盖。之后,上溢期间接收到的任何数据都将丢失。 
● 如果 RXNEIE 位置 1 或 EIE 与 DMAR 位均为 1,则会生成中断。 
● 通过先后对 USART_SR 寄存器和 USART_DR 寄存器执行读操作将 ORE 位清除。 
注意:ORE 位置 1 时表示至少 1 个数据丢失。存在两种可能: 
● 如果 RXNE=1,则最后一个有效数据存储于接收寄存器 RDR 中并且可进行读取; 
● 如果 RXNE=0,则表示最后一个有效数据已被读取,因此 RDR 中没有要读取的数据。接收到新(丢失)数据的同时已读取 RDR中的最后一个有效数据时,会发生该情况。读取序列期间(在 USART_SR 寄存器读访问与 USART_DR 读访问之间)接收到新数据时也会发生该情况。

选择合适的过采样方法 
接收器采用不同的用户可配置过采样技术(除了同步模式下),可以从噪声中提取有效数据。 
可通过编程 USART_CR1 寄存器中的 OVER8 位来选择采样方法,且采样时钟可以是波特率 时钟的 16 倍或 8 倍。 
根据应用: 
● 选择 8 倍过采样 (OVER8=1) 以获得更高的速度(高达 fPCLK/8)。这种情况下接收器对时钟偏差的最大容差将会降低。 
● 选择 16 倍过采样 (OVER8=0) 以增加接收器对时钟偏差的容差。这种情况下,最大速度限制为最高 fPCLK/16可通过编程 USART_CR3 寄存器中的 ONEBIT 位选择用于评估逻辑电平的方法。有两种选择: 
● 在已接收位的中心进行三次采样,从而进行多数表决。这种情况下,如果用于多数表决的 3 次采样结果不相等,NF 位置 1。 
● 在已接收位的中心进行单次采样 
根据应用: 
— 在噪声环境下工作时,请选择三次采样的多数表决法 (ONEBIT=0);在检测到噪声时请拒绝数据,因为这表示采样过程中产生了干扰。 
— 线路无噪声时请选择单次采样法 (ONEBIT=1) 以增加接收器对时钟偏差的容差。这种情况下NF 位始终不会置 1。 
帧中检测到噪声时: 
● 在 RXNE 位的上升沿时 NF 位置 1。 
● 无效数据从移位寄存器传送到 USART_DR 寄存器。 
● 单字节通信时无中断产生。然而,在 RXNE 位产生中断时,该位出现上升沿。多缓冲区通信时,USART_CR3 寄存器中的 EIE 位置 1 时将发出中断。 
通过先后对 USART_SR 寄存器和 USART_DR 寄存器执行读操作将 NF 位清零。 
注意:智能卡、IrDA 和 LIN 模式下不可采用 8 倍过采样。在这些模式下,OVER8 位由硬件强制 清零。 
过采样与数据的噪声检测

帧错误 
以下情况下将检测到帧错误: 
接收数据时未在预期时间内识别出停止位,从而出现同步失效或过度的噪声。 
检测到帧错误时: 
● FE 位由硬件置 1 
● 无效数据从移位寄存器传送到 USART_DR 寄存器。 
● 单字节通信时无中断产生。然而,在 RXNE 位产生中断时,该位出现上升沿。多缓冲区通信时,USART_CR3 寄存器中的 EIE 位置 1 时将发出中断。 
通过先后对 USART_SR 寄存器和 USART_DR 寄存器执行读操作将 FE 位清零。

接收期间可配置的停止位 
可通过控制寄存器 2 中的控制位配置要接收的停止位的数量 - 可以是 1 或 2 个(正常模式下), 也可以是 0.5 或 1.5 个(智能卡模式下)。 
1.0.5 个停止位(在智能卡模式下接收时):不会对 0.5 个停止位进行采样。结果,选择 0.5 个 停止位时,无法检测到帧错误和中断帧。 
2. 1 个停止位:将在第 8、第 9 和第 10 次采样时对 1 个停止位进行采样。 
3. 1.5 个停止位(在智能卡模式下):在智能卡模式下发送时,设备必须检查数据是否正确 发送。因此必须使能接收器块(USART_CR1 寄存器中的 RE =1)并检查停止位,以测 试智能卡是否已检测到奇偶校验错误。发生奇偶校验错误时,智能卡会在采样时将数据信号强制为低电平,即 NACK 信号-,该信号被标记为帧错误。之后,FE 标志在 1.5 个 停止位的末尾由 RXNE 置 1。在第 16、第 17 和第 18 次采样时对 1.5 个停止位进行采 样(停止位采样开始后维持 1 个波特时钟周期)。1.5 个停止位可分为 2 个部分:0.5 个 波特时钟周期(未发生任何动作),然后是 1 个正常的停止位周期(一半时间处进行采 样)。 
4. 2 个停止位:采样 2 个停止位时在第 8、第 9 和第 10 次采样时对第一个停止位进行采 样。如果在第一个停止位期间检测到帧错误,则帧错误标志位将会置1。发生帧错误时 不检测第 2 个停止位。RXNE 标志将在第一个停止位末尾时置 1。

小数波特率生成 
对 USARTDIV 的尾数值和小数值进行编程时,接收器和发送器(Rx 和 Tx)的波特率均设置 为相同值。 
波特率计算公式 
USARTDIV 是一个存放在 USART_BRR 寄存器中的无符号定点数。 
● 当 OVER8=0 时,小数部分编码为 4 位并通过 USART_BRR 寄存器中的 DIV_fraction[3:0]位编程。 
● 当 OVER8=1 时,小数部分编码为 3 位并通过 USART_BRR 寄存器中的 DIV_fraction[2:0]位编程,此时 DIV_fraction[3] 位必须保持清零状态。 
注意:对 USART_BRR 执行写操作后,波特率计数器更新为波特率寄存器中的新值。因此,波特率 寄存器的值不应在通信时发生更改。

奇偶校验控制 
将 USART_CR1 寄存器中的 PCE 位置 1,可以使能奇偶校验控制(发送时生成奇偶校验位,接 收时进行奇偶校验检查) 
SB:起始位,STB:停止位,P:奇偶校验位。

偶校验 
对奇偶校验位进行计算,使帧和奇偶校验位中“1”的数量为偶数(帧由 7 个或 8 个 LSB 位 组成,具体取决于 M 等于 0 还是 1)。 
例如:数据=00110101;4 个位置 1 => 如果选择偶校验(USART_CR1 寄存器中的 PS 位 = 0),则校验位是 0。

奇校验 
对奇偶校验位进行计算,使帧和奇偶校验位中“1”的数量为奇数(帧由 7 个或 8 个 LSB 位 组成,具体取决于 M 等于 0 还是 1)。 
例如:数据=00110101;4 个位置 1 => 如果选择奇校验(USART_CR1 寄存器中的 PS 位 = 1),则校验位是 1。

接收时进行奇偶校验检查 
如果奇偶校验检查失败,则 USART_SR 寄存器中的 PE 标志置 1;如果 USART_CR1 寄存 器中 PEIE 位置 1,则会生成中断。PE 标志由软件序列清零(从状态寄存器中读取,然后对 USART_DR 数据寄存器执行读或写访问)。 
注意:如果被地址标记唤醒:会使用数据的 MSB 位而非奇偶校验位来识别地址。此外,接收器不会 对地址数据进行奇偶校验检查(奇偶校验出错时,PE 不置 1)。

发送时的奇偶校验生成 
如果 USART_CR1 寄存器中的 PCE 位置 1,则在数据寄存器中所写入数据的 MSB 位会进 行传送,但是会由奇偶校验位进行更改(如果选择偶校验 (PS=0),则“1”的数量为偶数; 如果选择奇校验 (PS=1),则“1”的数量为奇数)。 
注意:用于管理发送过程的软件程序可以激活软件序列,进而将 PE 标志清零(从状态寄存器中读取, 然后对数据寄存器执行读或写访问)。在半双工模式下工作时(具体取决于软件),这可能会导致 PE 标志意外清零。


关键字:STM32F4  USART 引用地址:STM32F4学习笔记6——USART Part1

上一篇:STM32F4学习笔记7——USART Part2
下一篇:STM32F4学习笔记5——SysTick定时器

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

e络盟使STM32F4 Discovery MCU开发套件实现无线网络连接
e络盟近日宣布提供用于意法半导体(ST)STM32F4 Discovery微控制器开发套件的Discover Wi-Fi开发板,以实现无线连接。Discover Wi-Fi开发板采用Murata SN8200无线网络控制器模块,可提供板载Wi-Fi功能及网络软件栈,是各种高性能、低功耗无线解决方案的完美选择。 Discover Wi-Fi开发板插入意法半导体的STM32F4 Discovery套件后,借助UART和SPI命令接口以及工作频段在2.4 GHz的 IEEE802.11b/g/n标准可提供一系列的广泛功能。Discover Wi-Fi开发板还配备源代码、文档及软件演示,有利于快速启动无线网络项目。 亚太区用户现可
[单片机]
STM32开发笔记47:STM32F4+DP83848以太网通信指南系列(一)
单片机型号:STM32F407VGT 本章为系列指南第一章,主要是介绍一下项目思路,并且尽可能列出从零开始着手开发这个项目过程中,所需要理解的各类知识点,关于这些知识点,如果需要更详细的介绍,请列为看官自行百度谷歌。 STM32F407简介 STM32F407主频168MHz,主频这个数值的意义可以这么理解:每秒执行168,000,000步简单指令,也就是每毫秒168,000次,每微秒168次。我们工业以太网进入实时通信后的数据传输周期大概每2ms交互4次,每次60个Byte,最差的算法复杂度计算下来需要每毫秒4 / 2 * 60byte = 120步(事实上用不了这么多步),而这颗STM32F07的芯片提供每毫秒168,00
[单片机]
STM32开发笔记47:<font color='red'>STM32F4</font>+DP83848以太网通信指南系列(一)
avr单片机USART串口通讯初始化配置及说明
avr atmega16 单片机通用同步和异步串行接收器和转发器 (USART) 是一个高度灵活的串行通讯设备,其工作模式及其初始化,寄存器说明如下。 //*****************************USART 控制和状态寄存器A(UCSRA)******************************** /*USART 控制和状态寄存器A(UCSRA) bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 RXC TXC UDRE FE DOR PE U2X MPCM RXC: USART 接收结束
[单片机]
stm32f407】独立看门狗 iwdog
独立看门狗 STM32F4的独立看门狗由内部专门的32Khz低速时钟(LSI)驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的32Khz,而是在15~47Khz之间的一个可变化的时钟,只是我们在估算的时候,以32Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。独立看门狗有几个寄存器与我们这节相关,我们分别介绍这几个寄存器,首先是关键字寄存器IWDG_KR 在关键字寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其 复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号
[单片机]
【<font color='red'>stm32f4</font>07】独立看门狗 iwdog
第33章 STM32F429的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)
33.1 初学者重要提示 学习本章节前,务必优先学习第31章。 对于DAC8562和DAC8563,教程中不做区分,因为DAC8562和DAC8563完全兼容,区别仅仅在于CLR引脚有效时,DAC8562数据设置为0, DAC8563数据设置为32767。 本章涉及到的知识点比较多,需要大家掌握STM32H7的SPI , DMA,TIM,DMAMUX和DAC8563的一些细节用法。 我们的H7板子配套了SPI + DMA方式控制DAC856X,而F4系列不方便实现,确切的说是可以用DMA方式,但是不方便控制写入速度,需要借助定时器中断进行更新,实用价值不是很大。 DAC856X数据手册,模块原理图和接线图都已经放到
[单片机]
第33章 <font color='red'>STM32F4</font>29的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)
STM32F4学习笔记之GPIO(使用固件库)
1.使能GPIO的AHB时钟,使用函数: RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE); 2.配置GPIO工作模式用GPIO_Init()函数 数据类型说明 typedef struct { uint32_t GPIO_Pin; //引脚配置 GPIOMode_TypeDef GPIO_Mode; //GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(备用),GPIO_Mode_AN(模拟) GPIOSpeed_TypeDef GPIO_Speed;// GPIO_Speed_2MHz,GPIO_Spe
[单片机]
STM32F4跑马灯实验
硬件连接:LED分别接在PF9和PF10脚,且低电平点亮led; 用到的库函数: 头文件 源文件对应的都有头文件,需添加到工程; 源文件(lib目录) misc.c(一般我们都不会删掉这个头文件) stm32f4xx_rcc.c(所有的工程都会用到,涉及到时钟的使能) stm32f4xx_gpio.c stm32f4xx_usart.c(正点原子程序需要) led跑马灯函数实现流程 使能IO口的时钟。(调用RCC_AB1PeriphClockCmd(); 不同的外设调用的时钟使能函数可能不一样;) 初始化IO口的模式; 操作IO口; main.c文件 /**************** 实现功能:实现LED
[单片机]
STM32F429 >> 12. I²C 通讯(Code)
硬件I²C 在此我们使用硬件I²C 通讯,即使用I²C 外设帮助我们控制数据的发送和时钟的规律跳变。 若是使用模拟I²C 即是51 风格的编程,用程序手动控制两根总线的数据和时钟变化。 编程指南 初始化I²C GPIO引脚; 初始化I²C; 根据事件相应顺序编写相应的读/写操作程序; 编写页写入程序;(非必要) 编写缓冲区buffer 写入程序。(非必要) bsp_i2c.h /** ****************************************************************************** * @file bsp_i2c.h * @author Waao * @ver
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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