调试STM8/stm32串口时发现的问题 一串数据接收只能接收2个字节
描述:串口中断1用来接收到的数据,我是用串口助手发送一个8字节的数据,然后我想查看8个字节是否被单片接收,比如数据是0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08这8个数值,串口中断
#pragma vector=ITC_IRQ_UART1_RX + 2
__interrupt void Uart1RxdInt(void)
{ //此函数内已完成清中断标志
u8 ret;
if(UART1_GetFlagStatus(UART1_FLAG_RXNE)!=RESET)
{
tmp = UART1_ReceiveData8();
ret=UART_KbdPkgRead(tmp);
if(ret==0)
{
KBD_Flag_RECE=1;
}
}
}
我在ret的地方设了个断点,然后每次发送进入中断的时候发现可以停止在那,并且此时接受的数据的确也是0x01,然后有全速运行,接受的数据也是0x02,在全速运行就可能又是0x01或者根本不会停下来,
此时我才知道我犯了一个错误,当发送一串数据时,断点不应该设在中断内,因为cpu在断点停留处,她是不会停下的,也就是那串数据会被错过,如果你发送一个数字,那就不会错过了。
接下来该怎么办呢?
进入中断的函数,比如我的是UART_KbdPkgRead()。进入后可以编写一个小程序,用来判断接受得到数据是否是要发送的,比如if(dat==0x01),if(dat==0x02).这样在他前边设置断点,用来判断这一串数据是否被单片机接收到了。