串口遇到的问题"/>
在keil5中调试串口遇到的问题
1.问题
在keil5中调试stm32串口实验时,
向单片机的串口1发送数据,观察串口1的寄存器,此时串口1的中断服务函数会遇到无法进入下图if
的情况,此时观察串口1寄存器RXEN的值(由定义的变量my来接受)
my的值0x00,那么串口1寄存器RXEN的值确实时0;
那就有个问题,由数据手册如下可知
能进入中断服务函数,说明RXEN肯定为1,那么为什么进入中断之后,就变成0了?
2.解决
在调试时查看串口1的寄存器时不仅会观察RXNE,还会有DR数据寄存器
当观察DR数据寄存器时调试器会对DR寄存器进行读操作,由下图可知,
对DR寄存器进行读操作会将RXEN清零.
所以当一直观察串口1的寄存器时,向单片机发送数据会将RXEN置1,将进入中断服务函数,此时由于需要观察DR寄存器的值,调试器会读取单片机上DR寄存器的值,一旦读取RXEN的值将会被由硬件置0;
所以不会进入if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)的函数,因为此时由于调试器的读取RXEN的值已经发生变化;
当不观察串口1寄存器的值时,由于调试器不会去读取DR的值,那么程序会顺利执行;
更多推荐
在keil5中调试串口遇到的问题
发布评论