使用 STM32 的 DWT 单元监控内存-实验

时间:2024-04-02 13:10:54

刚好我手中有块 STM32U575 的 Nucleo 板子,可以拿过来进行功能验证。
首先我们通过 STM32CubeMX 实现了基本的串口输出打印的工程,然后在此工程中,
按照以下步骤,添加 DWT 的配置 :

  1. 使能 tracing 功能;
  2. 使能调试中断功能;
  3. 配置 comparator 寄存器;
  4. 配置 function 寄存器

具体代码如图 1:
图1.DWT 的配置
在这里插入图片描述
这里我们配置了两个 comparator,COMP0 监控 test_var 变量的写操作, COMP1 监控 HAL_Delay 函数的调用,一旦发生 test_var 变量的写动作,或者 HAL_Delay 函数被调用,都将产生 DebugMonitor 中断事件,并且我们可以在 Debug_Mon_Handler 中断中区分这两个 comparator 事件。
图2.DebugMon_Handler 中断的参考实现
在这里插入图片描述
我们在主循环中,通过延时,并输出循环打印信息。
图3.Main 主循环的参考代码
在这里插入图片描述
下面是测试的结果,可以看出,test_var 变量被修改时,以及 HAL_Delay 被调用时,行为均被记录下来了。
图4.DWT 的测试结果
在这里插入图片描述