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

使用 STM32 的 DWT 单元监控内存

[复制链接]
STMCU小助手 发布时间:2023-2-14 14:32
1. 前言关于 DWT(Data watchpoint and trace unit),相信有很多工程师都知道,其可用于 us级别的延时。
7 P# f2 C! J# `* V5 j今天想和大家分享的是,通过 DWT 检测特定内存变量或函数,当其被修改或被调用时时,可以触发中断,通过这样的方式,实现一些特殊的调试手段。
4 J  I4 V3 y5 v/ O6 b( E7 O4 t/ m/ F

8 e6 |2 U. R* v, S/ M9 E1 a2. DWT 介绍
. z4 x6 W. B4 r' lU5 的 DWT comparator 有以下特性:7 W' M  x9 C6 T  d% ]
1) 用作指令地址匹配或数据地址匹配的单一比较器。6 z. d/ a+ Q8 u  u2 E
2) 在链接组中使用相关的地址范围匹配或数据地址范围匹配。
$ d5 G9 F0 |9 [5 S/ T0 i% G当 comparator 被匹配时,可以生成以下事件:
( c5 c' G1 ~; |7 M1) 调试事件,导致 PE 或者进入调试状态;或者,如果执行主扩展则要进行DebugMonitor 异常。
/ _& v  R. E% q$ U) D( }  z2) 如果实现,将与 ETM 匹配。2 F" ^/ _" z& Q; s0 B% k4 {6 ^
3) 向另一个外部资源发送匹配。
# ~4 i* N( M2 v+ T+ y3 DDWT 由 function 和 comparator 寄存器组成,其定义是在 Armv8-M Architecture Reference Manual 文档中。
0 v  p, d# r2 e) B+ MDWT_COMPn:存放比较值, u0 ?( X% f; l' a' O( `  [; Z
DWT_FUNCTIONn:定义 comparator 的操作
& k* @7 e2 z/ t; g; |$ l5 E7 v1 V+ u+ ]( y# b4 L, {$ u& X2 y

/ t2 k5 c; S! t) V ON(VNPV2BQP6P@$]2(0XYLU.png ! g% J0 z# E, U$ {, A! @: X* a. m
G{MHUSS6TXE1[3K@Q3`8Z[M.png % i2 ^) [6 {' c* ?& q4 |7 L( m

, W1 h& e- J& f2 A8 u, J

3 Z! d3 e. ~3 H' Y3 X' i3 i 3. 实验2 g" n; e, T: d8 Z% y4 ^
刚好我手中有块 STM32U575 的 Nucleo 板子,可以拿过来进行功能验证。
# ^; `; Q  E# ]( w首先我们通过 STM32CubeMX 实现了基本的串口输出打印的工程,然后在此工程中,按照以下步骤,添加 DWT 的配置 :- b5 O' P" {8 h* e, h# r4 g
1, 使能 tracing 功能;
( Z9 q6 _& @* Q1 q& v2, 使能调试中断功能;( q5 k6 `& q! l# U
3, 配置 comparator 寄存器;1 N; A: l6 G5 Z/ x# e6 R' d8 J2 S4 v% Y
4, 配置 function 寄存器
9 x, E& r: o, x% N0 f; E具体代码如图 1:
1 b* P: c$ f0 D( |; ~
) \, I, r; h( l* E/ m/ U
& P$ ]. w/ e' M. x" D/ k8 j: W

' g- V, L% i  s8 t, d* o4 W) G+ M% d: ?: I$ p( |. E, _. O8 e
) R+ q4 t6 `# K- e
这里我们配置了两个 comparator,COMP0 监控 test_var 变量的写操作, COMP1 监控 HAL_Delay 函数的调用,一旦发生 test_var 变量的写动作,或者 HAL_Delay 函数被调用,都将产生 DebugMonitor 中断事件,并且我们可以在 Debug_Mon_Handler 中断中区分这两个 comparator 事件。
- ~! X) x" y$ x3 z! r4 r6 d! ]! c; V" t8 k' _# f$ c6 ]
) I/ Z0 @! k7 g8 X5 _/ 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版