最近调试串口的时候突然发现一个问题:由于之前调试串口都是直接把串口的USB连接上电脑,打开串口调试助手,然后才开始调试的,这种情况下程序跑的很顺利。但是,又一次我没有把串口的USB连接上电脑就直接开始跑程序,什么都没做,程序就直接跑进串口的中断,然后出不来了,这个时候再插上USB也出不来中断。更令我吃惊的是,只要插上了USB,哪怕我的串口调试助手没有打开串口,程序也跑的很好。。。。
捣鼓了半天,实在想不明白,所以想请教一下各位,谢谢大家了。
下面是中断程序的代码:
//串口中断服务函数
void USART1_IRQHandler (void)
{
if(USART_GetITStatus(USART1,USART_IT_ORE)!=RESET)
{
usart_read = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_ORE);
}
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
usart_read_f[num] = USART_ReceiveData(USART1);
Usart_SendByte( USART1, usart_read_f[num]);
num++;
if(num==8)
{
for(i=0;i<8;i++){
DealMODBUSData(usart_read_f); //modbus的处理程序
}
num=0;
}
}
} |