关于STM32利用硬件仿真串口中断处理函数应注意的问题
扫描二维码
随时随地手机看文章
我们在利用jlink或其他仿真器对串口中断处理函数的数据接收进行仿真时,如果在中断函数中设置了断点,我们向串口发送数据端会采用逐个字节发送而不能采用一次性发送多个字节,当然从广义上来讲,你一次发那么多字节我在断点处程序已经停止了再运行肯定你的数据我会丢失啊,所以需要逐个字节发送这是可以理解的。而我这里讲的是如果你一次发送多个字节将会导致什么后果的问题.
假设1:假如你的断点设置在res = USART_ReceiveData(USART1)之后,以下面发送的这串字符为例,那么实际上当你停到断点处看到接收到fe时由于DR寄存器之前已经清空,实际上01已经存到DR中了,这时你运行会再次运行到这个断点,即受到了fe 和01两个字符,接下来再运行就不会再停止了,因为后面数据已丢失。
假设2:假设你的断点在res = USART_ReceiveData(USART1)之前,你会发现如果你仍发送这串数据那么你的程序第一次接收到fe后再运行再发什么数据都接收不到了,并且主函数也是不运行的,点击停止要么仍在中断中,要么在USART_GetITStatus()某处。查看手册你p523页关于溢出错误的解释你就会明白在EXNE未清除之前再来数据会导致溢出错误的!!!这样会导致程序始终陷入中断中!!可通过接口USART_GetFlagStatus(USART1,USART_IT_ORE)进行验证
这才是调试串口中断处理函数不能一下发送一串字符的原因!!而不仅仅是数据会丢失问题