USART和UART介绍
USART:通用同步和异步收发器 (A是异步,S是同步)
UART:通用异步收发器
如何实现
从板子上的下载器DAP Link引脚上的TXD和RXD连到单片机的PA9和PA10上实现数据的发送和接收
把PA9(RX)复用成串口1(usart_1)的接收,PA10(TX)复用成串口1(usart_1)的发送
USART如何发送和接收数据?(底层)
将内部寄存器USART_TDR里的内容直接给TxFIFO,再用移位寄存器(TX Shift Reg)将FIFO里的内容一个一个发送出去(例如要发送数据1010 则第一秒发送1,第二秒发送0一秒一秒发送数据)
接收同理:将发送的数据一位一位传入移位寄存器(RX Shift Reg)然后传入RxFIFO——>USART_RDR内部寄存器
发送接收流程
粗略版
CPU通过APB总线把数据给USART_TDR,硬件就自动发送了
接收则直接去读数据即可
发送详细版(此操作CUBEMX自动生成配置 , 不用会用只需理解)
1.向CR1的UE位写1使能串口。 UE : USART enable
2.向CR1的M位定义字长。M位有M1和M0
如图所示M位写00为发送八位字长,一个起始位,01为9位,10为7位
3.CR2的停止位数量进行编程。
4.对DMA进行配置。
5.配置BRR寄存器的波特率,波特率为控制数据发送的频率。
6.发送器对TE位置1,发送一个空闲帧(高电平)作为第一次数据发送(告诉外设它开始发数据了)TE:使能发送
7.把要发送的数据写进USART_TDR寄存器,硬件自动发送。TXE(DR数据是否为空标志)清零。
8.在写入最后一个数据字后,等待TC=1,表示最后一个数据帧的传输结束。 4.如果USART_CR1寄存器中的TCIE位被置位,则会产生中断。
接收详细版
1.使能CR1寄存器中的UE位。
2.修改CR1中的M位定义字长。
3.对CR2中的停止位数量进行编程。
4.配置DMA(如果需要)。
5.配置BRR选择波特率。
6.将CR1中的RE位置1.检测如下序列。 检测序列表示开始接收 1110X0X0X0000 因为发送前,先发送空闲帧, 起始位又为低电平,所以, 检测到从1→0的跳变后, 就表示开始接收了。
7.接收到字符,RXNE(接收寄存器不为空) 置1,表示移位寄存器(RX Shift Reg)内容传送到了USART_RDR寄存器。
8.如果RXNEIE置1,产生接收中断。
9软件读取DR寄存器,RXNE自动清零, 或者手动写入0清零。