分析初始化STM32串口后進(jìn)入發(fā)送完成中斷的現(xiàn)象
以下是字符發(fā)送的配置過程,注意第6點(diǎn),在設(shè)置USART_CR1中的TE位時(shí),會(huì)發(fā)送一個(gè)空閑幀作為第一次數(shù)據(jù)發(fā)送,所以即便你執(zhí)行了USART_ClearFlag(USART1, USART_FLAG_TC); (這個(gè)函數(shù)肯定在空閑幀數(shù)據(jù)發(fā)送完成前執(zhí)行),所以當(dāng)空閑幀發(fā)送完后,就進(jìn)入發(fā)送完成中斷。
配置步驟:
1.
2.
3.
4.
的描述配置DMA寄存器。
5.
6.
7.
下,對(duì)每個(gè)待發(fā)送的數(shù)據(jù)重復(fù)步驟7。
8.
傳輸結(jié)束。當(dāng)需要關(guān)閉USART或需要進(jìn)入停機(jī)模式之前,需要確認(rèn)傳輸結(jié)束,避免破壞
最后一次傳輸。
解決的辦法:
方法一
在執(zhí)行USART_ITConfig(USART1, USART_IT_TC, ENABLE); 之前,
先延時(shí)一段時(shí)間,基本上比一個(gè)字符發(fā)送的時(shí)間長一點(diǎn)就可以了,然后再執(zhí)行
USART_ClearFlag(USART1, USART_FLAG_TC);
方法二:
在執(zhí)行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);
評(píng)論