你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用 STM32 的 DWT 单元监控内存

[复制链接]
STMCU小助手 发布时间:2023-2-14 14:32
1. 前言关于 DWT(Data watchpoint and trace unit),相信有很多工程师都知道,其可用于 us级别的延时。
8 n+ v8 y! G0 D- f0 s1 C" O今天想和大家分享的是,通过 DWT 检测特定内存变量或函数,当其被修改或被调用时时,可以触发中断,通过这样的方式,实现一些特殊的调试手段。1 H/ O' g/ w; J! h
. V& d  l& }: M# R
2 ~3 {' ~2 B; m4 J# |
2. DWT 介绍7 l8 p+ I/ V+ ?! c8 Q: F
U5 的 DWT comparator 有以下特性:
) B' c, E3 }6 c; r/ s& i- @5 U* u1) 用作指令地址匹配或数据地址匹配的单一比较器。
( ~/ s! [, ?* Q7 Q6 C& y0 g8 g" K2) 在链接组中使用相关的地址范围匹配或数据地址范围匹配。4 V7 b- _4 d4 U8 U$ l* a/ w- A
当 comparator 被匹配时,可以生成以下事件:
1 O+ a4 G6 B1 U; k% k1) 调试事件,导致 PE 或者进入调试状态;或者,如果执行主扩展则要进行DebugMonitor 异常。
$ y9 c" ?8 _  O6 i2) 如果实现,将与 ETM 匹配。$ |, T3 K+ A' ?) _
3) 向另一个外部资源发送匹配。
: h5 Q8 o9 B' I+ u; r! R/ c7 YDWT 由 function 和 comparator 寄存器组成,其定义是在 Armv8-M Architecture Reference Manual 文档中。
" y7 j( R! p$ o" jDWT_COMPn:存放比较值
! w" k3 R2 i! k1 u, @DWT_FUNCTIONn:定义 comparator 的操作 ; c2 S. a1 c9 p5 [% S
. Y( V: n) }% t$ N$ Y- Q( B' z

. [; X3 F0 r3 x9 a. M ON(VNPV2BQP6P@$]2(0XYLU.png 5 M) {! W4 u; }7 T3 O) o( T& `
G{MHUSS6TXE1[3K@Q3`8Z[M.png 8 S2 m4 T+ b' |7 L
0 n2 x8 o% }' p+ C" T" N/ F
* C, y+ \- B4 D, C9 }
3. 实验8 d5 W' ~5 p9 ~. X
刚好我手中有块 STM32U575 的 Nucleo 板子,可以拿过来进行功能验证。( D" s) H8 m0 u3 G
首先我们通过 STM32CubeMX 实现了基本的串口输出打印的工程,然后在此工程中,按照以下步骤,添加 DWT 的配置 :
5 X* V. Q  N- f1, 使能 tracing 功能;
& D% S% g6 {+ h" A' q! B, e2, 使能调试中断功能;
) W3 P. R9 D5 q8 _+ O- V3, 配置 comparator 寄存器;
) k( h4 L, |6 H5 Z0 x5 Z4, 配置 function 寄存器7 l3 B- m" k( q7 V  D6 A3 a
具体代码如图 1:8 s# p: J: O2 r

! a  J; m) J  ~; d& P
7 I+ Q# X2 `, g) x" {& E" t! C
9 D- _0 c/ q& B, g4 Q

! u6 N, ~5 a$ \2 I: X: @8 }+ ?

; ^7 p- m2 q+ M+ H. t" u这里我们配置了两个 comparator,COMP0 监控 test_var 变量的写操作, COMP1 监控 HAL_Delay 函数的调用,一旦发生 test_var 变量的写动作,或者 HAL_Delay 函数被调用,都将产生 DebugMonitor 中断事件,并且我们可以在 Debug_Mon_Handler 中断中区分这两个 comparator 事件。" C* @5 P* S' C) g

9 q$ Z! D% ^- Q/ i

0 h  U$ B! @, Q5 Z3 v完整版请查看:附件 用STM32的DWT单元监控内存_v1.0.pdf (380.17 KB, 下载次数: 65)
收藏 评论1 发布时间:2023-2-14 14:32

举报

1个回答
zrrrr 回答时间:2025-11-28 15:55:55

你好,请问我按照完整版里面的程序写出来,只要触发debugmonitor异常就会报SecureFault,走不到异常处理函数里面去,请问可能是什么导致的啊

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版