/**
* @brief Enables or disables the specified USART interrupts.
* @param USARTx: where x can be 1 or 2 to select the USART peripheral.
* @param USART_IT: specifies the USART interrupt sources to be enabled or disabled.
* This parameter can be one of the following values:
* @arg USART_IT_WU: Wake up interrupt. //唤醒中断
* @arg USART_IT_CM: Character match interrupt.//字符匹配中断
* @arg USART_IT_EOB: End of block interrupt. //块结束中断
* @arg USART_IT_RTO: Receive time out interrupt. //接收超时中断
* @arg USART_IT_CTS: CTS change interrupt. //CTS变化中断
* @arg USART_IT_LBD: LIN Break detection interrupt. //终止检测中断
* @arg USART_IT_TXE: Tansmit Data Register empty interrupt. //发送数据寄存器空中断
* @arg USART_IT_TC: Transmission complete interrupt. //发送完成中断
* @arg USART_IT_RXNE: Receive Data register not empty interrupt. //接收寄存器非空中断
* @arg USART_IT_IDLE: Idle line detection interrupt. //空闲线检测中断
* @arg USART_IT_PE: Parity Error interrupt. //奇偶校验错误中断
* @arg USART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) //错误中断
* @param NewState: new state of the specified USARTx interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
1、 使能串口发送TE,此时USART_DR为空,此时应查询TXE是否置1,TXE置1,TX脚先发送一个空闲帧,把F1帧写入USART_DR,TXE被清零。因为这时正在发送空闲帧,所以写入USART_DR的数据被放入TDR寄存器,还没有拷贝到移位寄存器。
2、 在空闲帧发送完后,TDR寄存器中的数据被拷贝到移位寄存器,此时应查询TXE是否置1,TXE置1,表示TDR已空,可以放入下一个数据。此时在TX脚上将会发送F1帧的数据,同时软件把F2帧的数据写入USART_DR,TXE被清零。
3、 在F1帧的停止位发送完后,因为TDR寄存器中的F2还没被拷入移位寄存器,所以此时TXE仍为0,TC不置1.此时应查询TXE是否置1,TXE置1,表示TDR已空,可以放入下一个数据。此时在TX脚上将会发送F2帧的数据,同时软件把F3帧的数据写入USART_DR,TXE被清零。
4、 在F2帧的停止位发送完后,因为TDR寄存器中的F3还没被拷入移位寄存器,所以此时TXE仍为0,TC不置1.此时应查询TXE是否置1,TXE置1,表示TDR已空,后面没有数据写入USART_DR,TXE保持高电平,此时在TX脚上将会发送F3帧的数据。
5、 在F3帧的停止位发送完后,因为此时TXE为1,所以TC标志会置1.如果TCIE为1,将会产生中断。
串口发送注意几点:
1、 如果正在发送数据,写数据进USART_DR将会把数据写到TDR缓冲寄存器,在本次发送完成后,再把TDR中的数据拷贝进移位寄存器。
2、 如果当前没有发送数据,写数据进USART_DR将会把数据直接放到移位寄存器,不经过TDR,TXE被清零,然后发送开始,TXE被硬件置1。
3、 只有当一帧数据的停止位发送完成并且TXE为1,TC才会被置1
上一篇:STM32配置时钟时注意设置FLASH等待周期
下一篇:STM32几种启动文件理解
推荐阅读最新更新时间:2024-03-16 15:14