STM32串口通信原理及HAL库代码stm32f1xx_hal_uart.c阅读分析
原理性说明:
//参考网址:https://blog.csdn.net/u010561799/article/details/89526266
在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空(单字节),另一个是TC=发送结束(多字节)。
当USART_DR中的1字节数据传送到移位寄存器后,TXE被置位,此时移位寄存器开始向TX信号线按位传输数据,但因为TDR已经变空,程序可以把下一个要发送的1字节数据(操作USART_DR)写入TDR中,而不必等到移位寄存器中所有位(共8位)发送结束,所有多个字节均发送结束时(最后1字节中送出停止位后)硬件会将TC标志置位。
另一方面,在刚刚初始化好USART还没有发送任何数据时,也会有TXE标志,因为这时发送数据寄存器是空的(故通常程序串口初始化时不打开此中断,否则频繁进入TXE中断)。而发送完成TCIE和IDLEIE则必须等发送1次数据后,才会有此中断产生,故一开始打开TCIE和IDLEIE中断没有关系。当然一开始必须要打开RXNEIE中断(接收数据),TXEIE和TCIE的意义很简单,TXEIE允许在TXE标志为'1'时产生中断,而TCIE允许在TC标志为'1'时产生中断。
|