STM8 UART 发送器
发送器根据M位的状态发送8位或9位的数据字。当M位置1,字长为9位,并且第九位(MSB)应该写入寄存器UART_CR1的T8位。
当发送使能位(TE)被设置时,发送移位寄存器中的数据在TX脚上输出,相应的时钟脉冲在SCLK脚上输出。
字符发送
在UART发送期间,在TX引脚上首先移出数据的最低有效位。在此模式里,UART_DR寄存器有一个缓冲器(TDR),位于内部总线和发送移位寄存器之间。
每个字符之前都有一个低电平的起始位;之后跟着数目可配置的停止位。UART支持以下停止位。
注意:
1.在数据传输期间不能复位TE位,否则将破坏TX脚上的数据,因为波特率计数器停止计数。 正在传输的当前数据将丢失。
2.TE位被激活后将发送一个空闲帧。
可配置的停止位
随每个字符发送的停止位的位数可以通过控制寄存器3的位5、4进行编程。
- 1个停止位:停止位位数的默认值。
- 2个停止位:可用于常规UART模式。
- 1.5个停止位:仅在智能卡模式下使用。
空闲帧包括了停止位。
断开帧是10位低电平,后跟停止位(当m=0时);或者11位低电平,后跟停止位(m=1时)。不可能传输更长的断开帧(长度大于10或者11位)。
(图103:STM8配置停止位)
配置步骤:
1.编程UART_CR1的M位来定义字长。
2.在UART_CR3中编程停止位的位数。
3.按下列顺序编写波特率寄存器选择要求的波特率。
a) UART_BRR2
b) UART_BRR1
4.设置UART_CR2中的TE位来使能发送模式。
5.把要发送的数据写进UART_DR寄存器(此动作清除TXE位)。在只有一个缓冲器的情况下,对每个待发送的数据重复此步骤。
单字节通信
清零TXE位总是通过对数据寄存器的写操作来完成的。TXE位由硬件来置1,它表明:
- 数据已经从TDR移送到移位寄存器,数据发送已经开始
- TDR寄存器为空
- 下一个数据可以被写进UART_DR寄存器而不会覆盖先前的数据
如果TIEN位被设置,此标志将产生一个中断。
如果此时UART正在发送数据,对UART_DR寄存器的写操作把数据存进TDR寄存器,并在当前传输结束时把该数据复制进移位寄存器。
如果此时UART没有在发送数据,处于空闲状态,对UART_DR寄存器的写操作直接把数据放进移位寄存器,数据传输开始,TXE位立即被置起。
当一帧发送完成时(停止位发送后),TC位被置起,并且如果UART_CR1寄存器中的TCIE位被置起时,中断产生。按以下步骤对TC位的清零。
1.读UART_SR寄存器
2.写UART_DR寄存器
断开符号
设置SBK可发送一个断开符号。断开帧长度取决M位。
如果设置SBK=1,在完成当前数据发送后,将在UART_TX线上发送一个断开符号。断开字符发送完成时(在断开符号的停止位时)SBK被硬件复位。UART在最后一个断开帧的结束处插入一逻辑'1',以保证能识别下一帧的起始位。
注意:发送的断开帧是不计入停止位位数的。如果设置UART为2个停止位,Tx线路会被拉低直到第一个停止位发送结束。之后在第二个字符前插入2个逻辑1。
注意:如果在开始发送断开帧之前,软件又复位了SBK位,断开符号将不被发送。如果要发送两个连续的断开帧,SBK位应该在前一个断开符号的停止位之后置1。
空闲符号
TEN置位将使得UART在第一个数据帧前发送一空闲帧。