关于中断的模式 RXNE TC TXE 等等的含义(看着就乱)



**************************开始*************************************************

在串口通信中许多人刚开始新手没理解各个寄存器的关系下面给大家附上一张

关于中断的模式 RXNE TC TXE 等等的含义(看着就乱)_第1张图片

可以看出TDR()传输寄存器) 和RDR(接受寄存器 )在传送数据时还有TSR  (传输移位寄存器)和RSR(接受移位寄存器)这两个是直接连接到TX和RX然后进行数据传输的

那么我给大家

       TDR->TSR->TX引脚

        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//这个函数是设置是哪种中断的

   

     RXNE含义 :即RDR寄存器有置,不为空就会产生中断(说明接受到数据了)\

     RXNE  位   :RXNE pending bit is cleared by a read to the USART_RDR register 
  *           (USART_ReceiveData()也就说调用这个函数就会被清除标志位

or by writing 1 to the RXFRQ in the register* USART_RQR (USART_RequestCmd()).或者通过写寄存器(没用。。)


         TXE含义:TDR寄存器(发送数据寄存器空)为空就会产生中断。也就是说TDR->TSR(移位寄存器),这时TDR为空 就会产生中断

TXE位:当TDR中的数据转移到TSR中时TXE置1,如果有数据写入TDR时就能将TXE置0;

 


TC含义 设置TC也就是说当TSR(移位寄存器)发送过数据后就会产生中断,也叫做发送完中断

TC位 : 如果SR中的数据全部通过TXDpin移出并且有数据进入DR,则TC置1。

TXE和TC区别 :

TXE允许程序有更充裕的时间填写TDR寄存器,保证发送的数据流不间断。
TC可以让程序知道发送结束的确切时间,有利于程序控制外部数据流的时序。


这里要注意:

1. 当TDR中的数据传送到移位寄存器后,TXE被设置,此时移位寄存器开始向TX信号线按位传输数据,但因为TDR已经变空,程序可以把下一个要发送的字节(操作USART_DR)写入TDR中,而不必等到移位寄存器中所有位发送结束。所以要合理安排终端模式
2. 同时TXE或者TC,根据资料和测试的结果,TXE在复位后就是置1的,即在执行USART_ITConfig(USART1, USART_IT_TXE,  ENABLE)后会立即产生中断请求。因此这造成一个麻烦的问题:如果没有真正的发送数据,TXE中断都会发生,而且没有休止,这将占用很大部分的CPU时间,甚至影响其他程序的运行! 因此建议的是在初始化时不好启用TXE中断

3. 并且需要注意TXE只能通过写DR来置0,不能直接将其清零,而TC可以直接将其写1清零。

所以有USART_ClearFlag(USART1, USART_FLAG_TC);// TC可以直接将其写1清零。



最后一点RDR TDR 都叫DR TSR ,RSR都叫SR


你可能感兴趣的:(关于中断的模式 RXNE TC TXE 等等的含义(看着就乱))