Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keil调试器更改STM32H7关于FIFO的硬件状态_Stm32_Keil_Cortex M - Fatal编程技术网

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

Keil调试器更改STM32H7关于FIFO的硬件状态,stm32,keil,cortex-m,Stm32,Keil,Cortex M,我在为STM32H743使用Keil MDK 5时遇到以下问题 我的SPI代码存在通信问题,过了一会儿我发现这是由于定期的Windows更新造成的 激活时,调试器似乎定期读取SPI数据寄存器,该寄存器读取FIFO(因此更改FIFO的状态)。因此,当软件读取FIFO时,一些字节已“丢失”(或被调试器消耗) 这是一种预期的行为吗?你知道是因为Keil还是因为STM32吗 我不完全理解调试器对寄存器的访问是如何工作的:我猜有一个读命令通过SWD发送,但是,在内部,对内存的访问是否会像在CPU上执行代码

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

我的SPI代码存在通信问题,过了一会儿我发现这是由于定期的Windows更新造成的

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

这是一种预期的行为吗?你知道是因为Keil还是因为STM32吗


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

如果您的监视窗口(或调试器屏幕上的任何其他类似窗口)中有DR显示每次读取数据时,您都会逐步执行代码


这是唯一可能的原因。

如果在监视窗口(或调试器屏幕上的任何其他类似窗口)中显示DR,并且每次读取数据(或通常断开)时都要单步执行代码


这是唯一可能的原因。

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

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

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


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

任何通过读取修改行为的寄存器(如清除状态位)在调试时都可能出现问题,并且这些寄存器显示在调试窗口中

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

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


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

我不中断或单步执行,我只是让代码运行。SPI_DR仅显示在Keil提供的外围寄存器窗口中。那么您认为该窗口如何从中获取数据?这个神奇的窗口和手表窗口有何不同?使用它是最常见的调试错误之一。当调试器读取此寄存器以显示时,它会从FIFO获取。我不说这有什么不同,我只回答您的评论。我希望调试器足够聪明,不会读取FIFO或其他更改硬件状态的寄存器。调试器如何知道哪些更改和哪些不更改?对于任何可能支持的芯片。我不中断或步进,我只是让代码运行。SPI_DR仅显示在Keil提供的外围寄存器窗口中。那么您认为该窗口如何从中获取数据?这个神奇的窗口和手表窗口有何不同?使用它是最常见的调试错误之一。当调试器读取此寄存器以显示时,它会从FIFO获取。我不说这有什么不同,我只回答您的评论。我希望调试器足够聪明,不会读取FIFO或其他更改硬件状态的寄存器。调试器如何知道哪些更改和哪些不更改?对于任何可能支持的芯片。