嵌入式入门——串口(2)USART
位13(UE):USART使能位12(M):配置字长(一般为8个数据位)位10(PCE):检验控制使能(禁止)位5(RXNEIE):接收中断使能位3(TE):发送使能位2(RE):接收使能。
目录
一. USART基础认识
1. USART主要特性
(1)全双工异步通信。
(2)单线半双工通信。
(3)单独的发送器和接收器使能位。
(4)可配置使用DMA的多缓冲器通信。(在SRAM里利用集中式DMA缓冲接收/发送字节)
(5)10个带标志的中断源。
2. USART结构
3. USART/UART的波特率(F1)——用户设置
(1)波特率介绍
在信息传输通道中,携带数据信息的信号单元叫码元,单位时间内通过信道传输的码元数称为码元传输速率,简称波特率。波特率可以被理解为一个设备在单位时间内发送(或接收)了多少码元的数据。
(2)波特率计算公式:
【 ①fck是串口的时钟。(只有USART1 使用PCLK2(APB2最高72MHz)。其它USART使用PCLK1(APB1最高36MHz) ②USARTDIV是一个无符号的定点数 】
(3)从USART_BRR寄存器值得到USARTDIV
把USARTDIV的整数部分写入位[15:4], USARTDIV的小数部分写入[3:0]。
(4)例程源码公式推导
4. USART发送/接收数据
(1)字长:可以通过编程USART_CR1寄存器选择成8或9位。在起始位期间,TX脚处于低电平,在停止位期间处于高电平。
(2)空闲符号:被视为完全由‘1‘组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位(’1‘的位数也包括了停止位的位数)。
(3)断开符号:被视为在一个帧周期内全部收到’0‘(包括停止位期间,也是'0)。在断开帧结束时,发送器再插入1或2个停止位(’1‘)来应答起始位。
(4)发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其产生时钟。
5. USART寄存器介绍(F1)
STM32 的每个串口都有3个控制寄存器 USART_CR1~3, 串口的很多配置都是通过这 3 个寄存器来设置的。
(1)控制寄存器 1(USART_CR1)
位13(UE):USART使能
位12(M):配置字长(一般为8个数据位)
位10(PCE):检验控制使能(禁止)
位5(RXNEIE):接收中断使能
位3(TE):发送使能
位2(RE):接收使能
(2)控制寄存器 2(USART_ CR2)
位13:12(STOP):配置停止位。(1位)
(3)控制寄存器 3(USART_CR3)
位3(HDSEL):半双工选择。(不选择)
(4)数据寄存器(USART_DR)
DR[8:0]为串口数据,包含了发送或接收的数据。它由两个寄存器组成的,一个给发送用(TDR),一个给接收用(RDR),且兼具读和写的功能。TDR 寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR 奇存器提供了输入移位寄存器和内部总线之间的并行接口。
(5)状态寄存器(USART_SR)
位6(TC):当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读 USART_SR,写USART_DR。2)直接向该位写0。
位5(RXNE):当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将该位清零,也可以向该位写0,直接清除。
二. USART/UART异步通信配置
-
配置步骤(接收发送一个字符)
(1)配置串口工作参数:HAL_UART_Init()
(2)串口底层初始化:重定义HAL_UART_MspInit() ( 用于配置GPIO、NVIC、CLOCK等)
(3)开启串口异步接收中断:HAL_UART_Receive_IT() (以中断的方式接收指定字节的数据)
(4)设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
(5)编写中断服务函数:USARTx_IRQHandler()、 UARTx_IRQHandler()
(6)串口数据发送:USART_DR, HAL_UART_Transmit() (以阻塞的方式发送指定字节的数据)
(7)实现代码参考
更多推荐
所有评论(0)