最近在调试STM32串口进程中发现一个古怪的问题,初始化串口1口,使能串口发送完结中止后,马上就进入了发送完结中止,21ic论坛上也有相同的问题评论,而香水版主并没有解说原因。为了完全的搞理解发生这一现象的原因:我细心的看了STM32手册中的串口部分的介绍:
以下是字符发送的装备进程,留意第6点,在设置USART_CR1中的TE位时,会发送一个闲暇帧作为第一次数据发送,所以即使你履行了USART_ClearFlag(USART1, USART_FLAG_TC); (这个函数肯定在闲暇帧数据发送完结前履行),所以当闲暇帧发送完后,就进入发送完结中止。
装备过程:
1.
2.
3.
4.
的描绘装备DMA寄存器。
5.
6.
7.
下,对每个待发送的数据重复过程7。
8.
传输完毕。当需求封闭USART或需求进入停机形式之前,需求承认传输完毕,防止损坏
最终一次传输。
处理的办法:
办法一
在履行USART_ITConfig(USART1, USART_IT_TC, ENABLE); 之前,
先延时一段时间,基本上比一个字符发送的时间长一点就可以了,然后再履行
USART_ClearFlag(USART1, USART_FLAG_TC);
办法二:
在履行USART_ITConfig(USART1, USART_IT_TC, ENABLE); 之前,
USART_ClearFlag(USART1, USART_FLAG_TC);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)
{
}
USART_ClearFlag(USART1,USART_FLAG_TC);