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

使用 STM32 的 DWT 单元监控内存

[复制链接]
STMCU小助手 发布时间:2023-2-14 14:32
1. 前言关于 DWT(Data watchpoint and trace unit),相信有很多工程师都知道,其可用于 us级别的延时。7 w1 K( M* \( F. x* N  I( `5 A# E
今天想和大家分享的是,通过 DWT 检测特定内存变量或函数,当其被修改或被调用时时,可以触发中断,通过这样的方式,实现一些特殊的调试手段。0 @' T* V0 Z1 N7 {1 {: A
6 P2 z/ n( w. a0 m! v3 `

7 K9 o) I( J! g: J0 p: w# l4 X2. DWT 介绍4 J1 ~& j3 m  X# O: K/ f% ^
U5 的 DWT comparator 有以下特性:& r- f' I# p: T
1) 用作指令地址匹配或数据地址匹配的单一比较器。
- B! Q4 ^9 W$ a2) 在链接组中使用相关的地址范围匹配或数据地址范围匹配。
& x7 q& U2 r! e& q2 N当 comparator 被匹配时,可以生成以下事件:# {% G+ h; t6 o3 j, d1 C
1) 调试事件,导致 PE 或者进入调试状态;或者,如果执行主扩展则要进行DebugMonitor 异常。! |% h9 P7 G5 O# \; J" e# `% X0 N0 l
2) 如果实现,将与 ETM 匹配。
  |5 Q! J: B. B5 t, y1 s9 }3) 向另一个外部资源发送匹配。
) z% V4 Z9 b$ l- A3 ?3 VDWT 由 function 和 comparator 寄存器组成,其定义是在 Armv8-M Architecture Reference Manual 文档中。1 i% O# A1 F7 L4 M1 M
DWT_COMPn:存放比较值, I7 M; g. i% ]  J
DWT_FUNCTIONn:定义 comparator 的操作 ( \0 I& m& b8 a8 u: j% I3 _
( r& ]' E' m; r* y9 |
  K) P/ @1 B: L) F
ON(VNPV2BQP6P@$]2(0XYLU.png
" k' ?$ ]6 \( s0 v" _2 [ G{MHUSS6TXE1[3K@Q3`8Z[M.png
% \$ H! a1 i% ~' b4 X/ Y3 C& Y3 s( S( ^; F5 t" [

% c1 r  `: U! K  I: M' I2 E. V 3. 实验
8 @+ N8 k& m4 q0 N" C刚好我手中有块 STM32U575 的 Nucleo 板子,可以拿过来进行功能验证。
+ Y! |- X8 d4 D3 C首先我们通过 STM32CubeMX 实现了基本的串口输出打印的工程,然后在此工程中,按照以下步骤,添加 DWT 的配置 :( R  n/ T7 e' z3 H, \% u$ f
1, 使能 tracing 功能;4 _3 K1 o/ T/ i3 g2 I  v- x
2, 使能调试中断功能;7 i- [* G8 t- |8 Y+ S3 }/ L6 ]
3, 配置 comparator 寄存器;# K, l- H+ U- z
4, 配置 function 寄存器
9 N5 n! R  J! E5 `$ \具体代码如图 1:
. r) I9 }$ E$ H
6 n  Q/ m# I) F' W
5 [3 X1 i+ [& x7 D" p" E7 S& V

: {1 W8 Y' B3 W( n7 Z( r  y- F) o
6 y* C7 ?4 C; s
这里我们配置了两个 comparator,COMP0 监控 test_var 变量的写操作, COMP1 监控 HAL_Delay 函数的调用,一旦发生 test_var 变量的写动作,或者 HAL_Delay 函数被调用,都将产生 DebugMonitor 中断事件,并且我们可以在 Debug_Mon_Handler 中断中区分这两个 comparator 事件。% D$ W) i4 B0 B( v! t$ k8 y
0 _5 w$ d' @/ [) L! P0 i, U1 W
" w) u- h% o+ X4 s
完整版请查看:附件 用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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版