STM32F105的板子,V3.5的固件库,USART3没有REMAP,USART3和UART4都是查询发送,中断接收。大部分时候都能正常工作,就是UART4偶尔会莫名其妙的死在下面这句代码处:
while(USART_GetFlagStatus(UART4,USART_FLAG_TXE)==RESET);
也就是发送寄存器空标志一直不置位,导致发送程序一直在等待,造成系统假死。我的发送程序如下:
void UART4_SendByte(u8 data)
{
while(USART_GetFlagStatus(UART4,USART_FLAG_TXE)==RESET);
USART_SendData(UART4,data);
}
中断、时钟、IO口配置都检查过了,没有发现异常,不然UART4一开始也不能正常工作了。
原子进来分析下,是哪里出了问题?不仅仅发生在一块板子上,在其他板子上也有这种现象。只是不容易发生,但是确实会发生。
UART4就是最简单的配置模式,流控什么的都没用,外部接线就TXD和RXD接到RS232芯片上。
如果定位不到故障源,我打算在while(USART_GetFlagStatus(UART4,USART_FLAG_TXE)==RESET) 这句代码后使能定时器计时,超时xms后就重新初始化UART4,不知道这样是否可行?但是想想重新初始化UART4好像也没什么代码,无非就是关中断,关时钟再开时钟,重新配置IO等,不知道这样的初始化有没有效果?
|