STM32 例程 串口实验 联系客服

发布时间 : 星期三 文章STM32 例程 串口实验更新完毕开始阅读0da07ef59e314332396893d0

00001:对源时钟进行2分频; 00010:对源时钟进行4分频; 00011:对源时钟进行6分频; ??

位[7:5]在智能卡模式下没有意义。 注:UART4和UART5上不存在这一位。

[编辑] USART帧格式

USART有三种帧格式:数据帧、空闲帧和断开帧。

[编辑] 数据帧

由一个低电平的起始位,8位或9位数据位,和0.5/1/1.5/2个高电平的停止位组成。

其中,数据位长度(字长)取决于USART_CR1寄存器中的M位;发送和接收时,最低有效位在前;当USART_CR1寄存器中的校验控制使能位PCE=1时,最高有效位被校验位代替;在同步模式下,CK引脚是否为最高有效位提供时钟脉冲取决于USART_CR2中的LBCL位 ;停止位数取决于USART_CR2寄存器中的STOP[1:0]。

[编辑] 空闲帧

在一个帧周期内,全部为高电平。

[编辑] 断开帧

在一个帧周期内,全部为低电平。在断开帧结束后,再发送1或2个高电平的停止位,以识别下一个低电平的起始位。 [编辑] 小数波特率

发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别(TE和RE)置位时,分别为其产生时钟。接收器和发送器的波特率应设置成相同。

Tx / Rx 波特率 = PCLKx / (16 * USARTDIV)

PCLKx可以是APB1的时钟PCLK1(用于USART1),也可以是APB2的时钟PCLK2(用于USART2、3、4、5) 。

USARTDIV = DIV_Maintissa[11:0] + DIV_Fraction[3:0] / 16

USARTDIV是一个无符号的定点数,转换成对应的二进制小数后,整数部分存放在USART_BRR寄存器中的DIV_Maintissa[11:0],小数部分存放在USART_BRR寄存器中的DIV_Fraction[3:0]。 注:在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进行中改变波特率寄存器的数值。 [编辑] 配置流程

1. 波特率:USART_BRR寄存器 2. 字长:USART_CR1中的M位

3. 停止位数:USART_CR2中的STOP[1:0] 4. 校验控制:USART_CR1中的PCE位和PS位 5. 收发模式:USART_CR1中的TE和RE

6. 硬件流控制:USART_CR3中的CTSE位和RTSE位 7. 使能USART:USART_CR1寄存器中的UE=1

如果采用多缓冲器通信,需配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器通信中的描述配置DMA寄存器。

如果需要产生中断,则还要设置相应中断的使能位。 完成上述配置后,就可以进行数据的发送和接收了。 [编辑] 发送过程

如果在收发模式配置中,发送器被使能了,即TE=1,则可以进行数据的发送。

[编辑] 空闲帧

置位TE将使得USART在第一个数据帧前发送一空闲帧。

[编辑] 数据帧

1. 开始时,发送数据寄存器TDR为空,TXE=1,如果TXEIE=1,则产生中断。 2. 向USART_DR中写入数据后,TXE=0。 3. 由于发送移位缓冲器也为空,硬件就会将TDR中的数据发送到发送移位寄

存器中。

4. TDR再次为空,TXE=1,如果TXEIE=1,则产生中断。

5. 再次向USART_DR中写入数据。不断地重复上述步骤,直到发送完所有数

据。

6. 在USART_DR寄存器中写入最后一个数据字后,要等待TC=1,如果TCIE=1,

则产生中断,它表示最后一个数据帧的传输结束。当需要关闭USART或需要进入停机模式之前,需要确认传输结束,避免破坏最后一次传输。 7. 发送到发送移位寄存器中的数据在时钟脉冲的激励下按照数据帧的格式

从TX脚上串行输出。

[编辑] 断开帧

如果设置SBK=1,在完成当前数据发送后,将在TX线上发送一个断开帧。断开帧发送完成时(在断开帧的停止位时)SBK被硬件复位。USART在最后一个断开帧的结束处插入一逻辑‘1’,以保证能识别下一帧的起始位。 注意:如果在开始发送断开帧之前,软件又复位了SBK位,断开符号将不被发送。如果要发送两个连续的断开帧,SBK位应该在前一个断开符号的停止位之后置起。

在数据传输期间不能复位TE位,否则将破坏TX脚上的数据,因为波特率计数器停止计数。正在传输的当前数据将丢失。 [编辑] 接收过程

如果在收发模式配置中,接收被使能了,即RE=1,则可以进行数据的接收。

[编辑] 起始位侦测

在USART中,如果辨认出一个特殊的采样序列,那么就认为侦测到一个起始位。 该序列为:1 1 1 0 X 0 X 0 X 0 0 0 0

注意:

1. 如果该序列不完整,那么接收端将退出起始位侦测并回到空闲状态(不设

置标志位)等待下降沿。

2. 如果3个采样点都为‘0’(在第3、5、7位的第一次采样,和在第8、9、

10的第二次采样都为’0’),则确认收到起始位,这时设置RXNE标志位,如果RXNEIE=1,则产生中断。

3. 如果两次3个采样点上仅有2个是‘0’(第3、5、7位的采样点和第8、

9、10位的采样点),那么起始位仍然是有效的,但是会设置NE噪声标志位。如果不能满足这个条件,则中止起始位的侦测过程,接收器会回到空闲状态(不设置标志位)。

4. 如果有一次3个采样点上仅有2个是’0’(第3、5、7位的采样点或第8、

9、10位的采样点),那么起始位仍然是有效的,但是会设置NE噪声标志位。

[编辑] 空闲帧

由于发送器在发送第一个数据帧前会发送一个空闲帧,因此接收器会接收到一个空闲帧。当一空闲帧被检测到时,其处理步骤和接收到普通数据帧一样,但如果IDLEIE位被设置将产生一个中断。

[编辑] 数据帧

1. 开始时,接收数据寄存器RDR为空,RXNE=0。

2. 接收器不断地对RX脚上输入的信号进行侦测,一旦侦测到起始位,就将

输入的数据移进接收移位寄存器中。