Keil 调试器更改 STM32H7 关于 FIFO 的硬件状态

Keil debugger changes the hardware state of STM32H7 regarding FIFOs

我在为 STM32H743 使用 Keil MDK 5 时遇到了以下问题。

我的 SPI 代码存在通信问题,一段时间后我发现这是由于定期 Windows 更新造成的。

当它被激活时,似乎调试器正在定期读取 SPI 数据寄存器,它读取 FIFO(因此改变了 FIFO 的状态)。因此,当软件读取 FIFO 时,一些字节已经“丢失”(或被调试器消耗)。

这是预期的行为吗?不知道是Keil的问题还是STM32的问题?

我不完全理解从调试器到寄存器的访问是如何工作的:我猜是通过 SWD 发送了一个读取命令,但是在内部,对内存的访问是否像代码一样通过 AHB/APB在 CPU ?

上执行

如果您的手表 window(或调试器屏幕上的任何其他类似 windows)显示 DR,并且每次单步执行(或通常中断)数据时单步执行代码已读。

这是唯一可能的原因。

任何通过读取修改行为的寄存器(例如清除状态位)在调试时可能会出现问题,并且寄存器显示在调试 window。

最好的办法是只在停止时查看寄存器(关闭外围设备的 DR window),并始终注意您可能会清除状态位等。

这是处理器的工作方式,与调试器无关。

这是串行通信等非常常见的调试问题。