在keil5中调试串口遇到的问题

2023-05-16

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的值,那么程序会顺利执行;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在keil5中调试串口遇到的问题 的相关文章

随机推荐