01前言 客户在使用 STM32H7 的时候,想要使用 DWT 计数来测量代码执行时间,评估执行效率。客户发现在重新上电或 reset 后,无法启用 DWT 进行计数。$ _; L S6 T& p, f 02调研$ {- L$ a) w6 ^5 A. P 在 ARMv7-M 架构中有个 DEMCR 寄存器,这个寄存器可以控制 DWT 的使能。在power-on reset 后这个寄存器所有位的值都为 0。而当 bit[24]为 0 时,DWT 和 ITM 模块都是 disabled 的。所以为了启用 DWT 模块,必须将 DEMCR 的 bit[24]置为 1。如图 1 所示:2 O F7 _6 B k7 Y 图1.DEMCR 寄存器 7 c6 L |) N4 _9 z# E03启用 DWT 进行计数/ T, m1 Q8 p6 u4 b! X/ K/ ? STM32H7 基于 Arm Cortex-M7 内核,而 Cortex-M7 是 ARMv7-M 架构,所以 H7 在配置 DWT 模块之前需要将 DEMCR 的 bit[24]置位。在基于 Cortex-M7 的芯片中,需要使用DWT-LAR 来解锁 DWT(其他核可能不需要,应具体分析),然后对 DWT_CTRL 进行相应使能即可。 在 CMSIS 文件中已经提供了相关寄存器的宏定义(例如在“core_cm7.h”文件中包提供了 DWT 和 DEMCR 的宏定义),我们可以使用这些宏定义方便的进行配置,如图 2所示: % B% ~# Z; H. w2 Z. q 图2.core_cm7.h 文件 0 [0 F$ B& g U; T- x2 k% |1 }8 W6 y4 f% ], ?- O1 @+ Q 示例(如下):使用 DWT 测量代码执行所用的时钟 cycle 数。/ [7 Z7 B+ w- e) r$ B8 B% S % u6 f R8 H+ _ 1 K# ?! |$ l' V7 P8 j9 n& ^$ A# r: O- C( W" {; e 04小结 在使用 ARMv7-M 架构的 STM32 时,对 DWT 配置之前应确保 DEMCR 中的 bit[24]已经被配置(使能 DWT),然后才能使用 DWT。& t% F6 n( ~" i: ^* N# j4 ] 3 L( D. T- l& \, r 转载自: STM32单片机8 g3 O/ N% [, _. T& n! O9 M9 h6 } 如有侵权请联系删除 - P; u6 R6 G9 ]3 p+ O8 J |
【NUCLEO-C0评测】硬件OLED显示
【STM32C0测评】外部中断控制小灯
【STM32C0评测】1、开箱,芯片介绍以及后续的评测计划
基于STM32调试小技巧之不复位调试
基于STM32的不复位调试的经验分享
基于STM32利用TIMER测量信号周期及占空比的精度经验分享
STM32应用笔记分类汇总 v1.2
获取编译时间作为版本号
【12月学习笔记】 STM32H7B3I-DK在STWin中显示汉字
意法半导体发布远距离无线微控制器,提高智能计量、智能建筑和工业监控的连接能效
学习学习
学习啦~~~