|
void USART1_IRQHandler(void) { uint16_t Value; if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) { Value = USART_ReceiveData(USART1); USART_SendData(USART1, Value); while(!USART_GetITStatus(USART1, USART_IT_TC)); } } 为什么这个串口中断函数只能进入一次呢? |
微信公众号
手机版
RE:STM32F030串口中断问题
回复:STM32F030串口中断问题
回复:STM32F030串口中断问题
你可以调试一下,程序是不是一直在while判断那里没有出来。
好的,我回去试一下,谢谢
RE:STM32F030串口中断问题
回复:STM32F030串口中断问题
因为你在程序中,使用了
while(!USART_GetITStatus(USART1, USART_IT_TC));
如果你将这个TC标志,换成USART_FLAG_TXE,也就是
while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
那样就正常了。
USART_IT_TC和USART_FLAG_TXE是STM32中很容易出问题的标志,参考手册上讲的很明白
RE:STM32F030串口中断问题
回复:STM32F030串口中断问题
这里错了,,你回去试试好了吗?
回复:STM32F030串口中断问题
因为你在程序中,使用了
while(!USART_GetITStatus(USART1, USART_IT_TC));
如果你将这个TC标志,换成USART_FLAG_TXE,也就是
while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
那样就正常了。
USART_IT_TC和USART_FLAG_TXE是STM32中很容易出问题的标志,参考手册上讲的很明白
在这个while之前不是已经发送过数据了,等待TXE标志清除?
RE:STM32F030串口中断问题