功能框图
1.功能引脚
USART引脚
STM32F103VET6 系统控制器有三个 USART 和两个 UART,其中 USART1 和时钟来源于 APB2 总线时钟,其最大频率为 72MHz,其他四个的时钟来源于 APB1 总线时钟,其最大频率为 36MHz。 UART 只是异步传输功能,所以没有 SCLK、 nCTS 和 nRTS 功能引脚。
2.数据寄存器
数据寄存器—USART_DR:9位有效,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应了两个物理内存。
奇偶校验控制
STM32F103 系列控制器 USART 支持奇偶校验。当使用校验位时,串口传输的长度将是 8 位的数据帧加上 1 位的校验位总共 9 位,此时 USART_CR1 寄存器的 M 位需要设置为1,即 9 数据位。将 USART_CR1 寄存器的 PCE 位置 1 就可以启动奇偶校验控制,奇偶校验由硬件自动完成。启动了奇偶校验控制之后,在发送数据帧时会自动添加校验位,接收数据时自动验证校验位。接收数据时如果出现奇偶校验位验证失败,会见 USART_SR 寄存器的 PE 位置 1,并可以产生奇偶校验中断。
中断控制
空闲中断是在检测到在数据收受后,总线上在一个字节的时间内没有再接收到数据时发生。即串口的RXNE位被置位之后才开始检测,检测到空闲之后,串口的CR1寄存器的IDLE位被硬件置1,必须采用软件将IDLE位清零才能避免反复进入空闲中断。具体的做法是先读取USART_SR,再读取USART_DR。需要注意的是,不能采用库函数USART_ClearFlag()或者USART_ClearItPending()来清除IDEL标注,因为这两个函数接收的中断标志位仅包括:
USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5).
USART_FLAG_LBD: LIN Break detection flag.
USART_FLAG_TC: Transmission Complete flag.
USART_FLAG_RXNE: Receive data register not empty flag.
字符帧的格式
部分寄存器
数据字长设置:USART_CR1:M,0:8bit,1:9bit
停止位字长设置:USART_CR2:STOP
校验使能、校验选择、中断使能:USART_CR1:PCE、PS、PEIE
校验错误标志位:USART_SR:PE
3.控制器
USART_CR1:UE
使用 USART 之前需要向 USART_CR1 寄存器的 UE 位置 1 使能 USART, UE **位用来开启供给给串口的时钟**。
USART_CR1:TE
当 USART_CR1 寄存器的发送使能位 TE 置 1 时,启动数据发送 。
USART_CR1:RE
如果将 USART_CR1 寄存器的 RE 位置 1,使能 USART 接收 。
数据发送过程:
USART_CR1 寄存器的 UE 位置 1 使能 USART,打开串口时钟。
当 USART_CR1 寄存器的发送使能位 TE 置 1 时,启动数据发送。发送移位寄存器的数据会在 TX 引脚输出, 低位在前,高位在后。
当发送使能位 TE 置 1 之后,发送器开始会先发送一个空闲帧(一个数据帧长度的高电平),接下来就可以往 USART_DR 寄存器写入要发送的数据。在写入最后一个数据后,需要等待 **USART 状态寄存器(USART_SR)的 TC 位为 1**,表示数据传输完成,如果USART_CR1 寄存器的 TCIE **位置 1,将产生中断**。
接收过程:
USART_CR1 寄存器的 UE 位置 1 使能 USART,打开串口时钟。
如果将 USART_CR1 寄存器的 RE 位置 1,使能 USART 接收,使得接收器在 RX 线开始搜索起始位。
在确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器数据移到 RDR 内,并把 USART_SR 寄存器的 RXNE 位置1。同时如果 USART_CR1 寄存器的 RXNEIE 置 1 的话可以产生中断。
4.小数波特率生成
对于 **USART 波特率与比特率相等 。
USART 的发送器和接收器使用相同的波特率。计算公式如下:
其中, fPLCK 为 USART 时钟,(注区分APB2和APB1两条总线) USARTDIV 是一个存放在波特率寄存器(USART_BRR)的 一个 无符号定点数。 其中 DIV_Mantissa[11:0] 位定义USARTDIV 的整数部分 ,DIV_Fraction[3:0]位定义 USARTDIV 的小数部分。
USART1在APB2总线上,时钟为72Mhz。USART2、3、4、5在APB1总线上,时钟为36Mhz。
波特率的常用值有 2400、 9600、 19200、 115200。下面以实例讲解如何设定寄存器值得到波特率的值。