基于STM32F4单片机USART寄存器控制的设计

usart又叫通用同步异步收发器,塔提供了一种灵活的方法与工业使用标准nrz异步春航数据格式的外部设备之间进行全双工数据交换。usart利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信,也支持lin(局部互联网),智能卡协议和irda(红外数据组织)sir endec规范以及调制解调器(cts/rts)操作,它还允许多处理器通信,使用多换成器配置的dma方式,可以实现高速数据通信。
usart寄存器控制框图如下
可通过对 usart_cr1 寄存器中的 m 位进行编程来选择 8(置0) 位或 9(置1) 位的字长。tx 引脚在起始位工作期间处于低电平状态。在停止位工作期间处于高电平状态。
空闲字符可理解为整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。
停止字符可理解为在一个帧周期内接收到的电平均为“0”。发送器在中断帧的末尾插入 1 或 2 个停止位(逻辑“1”位)以确认起始位。
发送和接收由通用波特率发生器驱动,发送器和接收器的使能位分别置 1 时将生成相应的发送时钟和接收时钟。
字符发送
usart 发送期间,首先通过 tx 引脚移出数据的最低有效位。该模式下,usart_dr 寄存 器的缓冲区 (tdr) 位于内部总线和发送移位寄存器之间。
每个字符前面都有一个起始位,其逻辑电平在一个位周期内为低电平。字符由可配置数量的停止位终止。
usart 支持以下停止位:0.5(智能卡模式下接收数据使用)、1(默认)、1.(智能卡模式下发送与接收使用)5 和 2(正常usart模式,单线模式和调制解调器模式支持该值) 个停止位。
注意:数据发送期间不应复位 te 位。发送期间复位 te 位会冻结波特率计数器,从而将损坏 tx 引 脚上的数据。当前传输的数据将会丢失。
使能 te 位后,将会发送空闲帧。
停止位的配置
步骤:
1.通过向%20usart_cr1%20寄存器中的%20ue%20位写入%201%20使能%20usart。
2.%20对%20usart_cr1%20中的%20m%20位进行编程以定义字长。
3.%20对%20usart_cr2%20中的停止位数量进行编程。
4.%20如果将进行多缓冲区通信,请选择%20usart_cr3%20中的%20dma%20使能%20(dmat)。按照多缓冲区%20通信中的解释说明配置%20dma%20寄存器。
5.%20使用%20usart_brr%20寄存器选择所需波特率。
6.%20将%20usart_cr1%20中的%20te%20位置%201%20以便在首次发送时发送一个空闲帧。
7.%20在%20usart_dr%20寄存器中写入要发送的数据(该操作将清零%20txe%20位)。为每个要在单缓%20冲区模式下发送的数据重复这一步骤。
8.%20向%20usart_dr%20寄存器写入最后一个数据后,等待至%20tc=1。这表明最后一个帧的传送已%20完成。禁止%20usart%20或进入暂停模式时需要此步骤,以避免损坏最后一次发送。
单字节通信
始终通过向数据寄存器写入数据来将%20txe%20位清零。
txe%20位由硬件置%201,它表示:
●%20数据已从%20tdr%20移到移位寄存器中且数据发送已开始。
●%20tdr%20寄存器为空。
●%20usart_dr%20寄存器中可写入下一个数据,而不会覆盖前一个数据。
txeie%20位置%201%20时该标志位会生成中断。
发送时,要传入%20usart_dr%20寄存器的写指令中存有%20tdr%20寄存器中的数据,该数据将在当%20前发送结束时复制到移位寄存器中。
未发送时,要传入%20usart_dr%20寄存器的写指令直接将数据置于移位寄存器中,数据发送开%20始时,txe%20位立即置%201。
如果帧已发送(停止位后)且%20txe%20位置%201,tc%20位将变为高电平。如果%20usart_cr1%20寄存器%20中的%20tcie%20位置%201,将生成中断。
向%20usart_dr%20寄存器中写入最后一个数据后,必须等待至%20tc=1,之后才可禁止%20usart%20或使微控制器进入低功率模式。
tc%20位通过以下软件序列清零:
1.从%20usart_sr%20寄存器读取数据
2.%20向%20usart_dr%20寄存器写入数据
注意:还可通过向%20tc%20位写入“0”将其清零。建议仅在多缓冲区通信时使用此清零序列。
中断字符
将 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 位由硬件强制 清零。

神奇的“器官芯片”:极高程度模拟人体测试(图文)
展讯通信选择CSR连接定位技术作为智能手机参考设计
高质量PCB设计理论
钢铁生产正在发生“智慧”转变,工作效率高速又安全
智信通新品第二弹,Y07加油宝,加油吧!
基于STM32F4单片机USART寄存器控制的设计
RDMA(远程直接内存访问)传输协议概述和应用案例
车规级电感厂家详解贴片绕线电感在电路中的作用 guing
兆易创新推出业界功耗最低LE系列SPI NOR Flash
基于单片机的风机温度控制系统的设计
单片机基本单元的VHDL设计
锂电池CMC粘结剂的四大特点、性能作用及挑选
第九届国际分子模拟与信息技术应用会议闭幕 与会科学家指点了今后信息技术发展的重点方向
索尼IMX586当副摄,Find X2 Pro的拍照能力很强
怎样将苹果备忘录笔记Notes“安装”到Win10上
利用有源偏置提高立体声性能
德索LVDS连接器的优势是什么
主板参数详解
iQOO Neo3新品发布性能强悍,仅2698元起
硅谷软件创新商LeanTaaS宣布了2020年的重大扩张计划