
1. 前言关于 DWT(Data watchpoint and trace unit),相信有很多工程师都知道,其可用于 us级别的延时。3 X3 n* e; W# H( j F/ h) D/ M 今天想和大家分享的是,通过 DWT 检测特定内存变量或函数,当其被修改或被调用时时,可以触发中断,通过这样的方式,实现一些特殊的调试手段。 . Y* ]5 C7 {9 z 4 t2 k3 T1 K& _/ B& B. j7 Y+ W 2. DWT 介绍 U5 的 DWT comparator 有以下特性:5 B9 _* j* l0 W, A# D 1) 用作指令地址匹配或数据地址匹配的单一比较器。1 D+ Q3 m( B' C1 n9 K 2) 在链接组中使用相关的地址范围匹配或数据地址范围匹配。; n5 w/ q) p% _' h5 E5 ~ 当 comparator 被匹配时,可以生成以下事件:. C1 V3 N1 _6 D5 N- s! J7 G 1) 调试事件,导致 PE 或者进入调试状态;或者,如果执行主扩展则要进行DebugMonitor 异常。 2) 如果实现,将与 ETM 匹配。 3) 向另一个外部资源发送匹配。 DWT 由 function 和 comparator 寄存器组成,其定义是在 Armv8-M Architecture Reference Manual 文档中。0 X, C ^* w' t R DWT_COMPn:存放比较值, M* ^* }2 [5 w" `7 }& \7 k DWT_FUNCTIONn:定义 comparator 的操作 9 q5 g* Q+ H- w1 {# ~ 2 S0 ]# @6 W" {2 ~! X) f Q2 P. } ![]() ![]() & p0 M+ m3 ^7 D& X6 e8 j e$ N3 e 3. 实验 刚好我手中有块 STM32U575 的 Nucleo 板子,可以拿过来进行功能验证。% \3 `2 b' B) C 首先我们通过 STM32CubeMX 实现了基本的串口输出打印的工程,然后在此工程中,按照以下步骤,添加 DWT 的配置 : 1, 使能 tracing 功能;) I7 @$ n9 O. f 2, 使能调试中断功能; 3, 配置 comparator 寄存器;+ @& r; D$ G0 n+ p3 e* W5 \ 4, 配置 function 寄存器 具体代码如图 1:$ V5 {: h: p) q8 `7 @2 _- E ! l9 b( M' P/ r A+ ^ ![]() 这里我们配置了两个 comparator,COMP0 监控 test_var 变量的写操作, COMP1 监控 HAL_Delay 函数的调用,一旦发生 test_var 变量的写动作,或者 HAL_Delay 函数被调用,都将产生 DebugMonitor 中断事件,并且我们可以在 Debug_Mon_Handler 中断中区分这两个 comparator 事件。 完整版请查看:附件 ![]() |
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南
适用于STM32微控制器的ΣΔ数字接口入门