STMCU小助手
发布时间:2023-10-30 15:53
|
01前言* @5 G& _& R/ w! h3 a 客户在使用 STM32H7 的时候,想要使用 DWT 计数来测量代码执行时间,评估执行效率。客户发现在重新上电或 reset 后,无法启用 DWT 进行计数。 " m5 n7 h4 h: M 02调研 j7 Y6 N8 c G- m- \7 Y 在 ARMv7-M 架构中有个 DEMCR 寄存器,这个寄存器可以控制 DWT 的使能。在power-on reset 后这个寄存器所有位的值都为 0。而当 bit[24]为 0 时,DWT 和 ITM 模块都是 disabled 的。所以为了启用 DWT 模块,必须将 DEMCR 的 bit[24]置为 1。如图 1 所示:$ T$ y, v7 a* b d; U 5 s) {5 }* g: ~$ Y2 s
图1.DEMCR 寄存器 03启用 DWT 进行计数$ s. g, X; J$ z3 z2 G1 [- q6 r' Y STM32H7 基于 Arm Cortex-M7 内核,而 Cortex-M7 是 ARMv7-M 架构,所以 H7 在配置 DWT 模块之前需要将 DEMCR 的 bit[24]置位。在基于 Cortex-M7 的芯片中,需要使用DWT-LAR 来解锁 DWT(其他核可能不需要,应具体分析),然后对 DWT_CTRL 进行相应使能即可。 ( h) ?* h' U( H7 ^1 g' y1 Z 在 CMSIS 文件中已经提供了相关寄存器的宏定义(例如在“core_cm7.h”文件中包提供了 DWT 和 DEMCR 的宏定义),我们可以使用这些宏定义方便的进行配置,如图 2所示:
图2.core_cm7.h 文件 . c ^- C- F8 u2 E& \ r 示例(如下):使用 DWT 测量代码执行所用的时钟 cycle 数。" T" L, R8 _, G) w
7 @3 R+ Q5 E& D! O8 j q, m
04小结) w) z& L) t# q" x* K9 t 在使用 ARMv7-M 架构的 STM32 时,对 DWT 配置之前应确保 DEMCR 中的 bit[24]已经被配置(使能 DWT),然后才能使用 DWT。* c% z% F6 s, F+ Q& y . ~: B- ~& }6 `- j4 {) h + v# x( ~3 E8 ]7 m9 Q 转载自: STM32单片机 如有侵权请联系删除# t; e v& X# v |
《STM32CubeMX2 实战课程》学习笔记5+CubeMX2生成的Uart初始化代码中没有使能
《STM32CubeMX2 实战课程》学习笔记4+FreeRTOS中的SysTick错误及改正
使用stm32C542做的低功耗密码锁示例
《STM32CubeMX2 实战课程》学习笔记1+由MX2生成MDK5项目并打开
《STM32CubeMX2 实战课程》学习笔记3.+sleep/stop/standby低功耗模式的入口
《STM32CubeMX2 实战课程》学习笔记2+MX2生成的MDK5工程中添加已存在文件(*.c / *.h)
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
基于STM32在线升级OTA经验分享
【STM32C0测评】Nucleo-C092开发板驱动DS1302实验
Keil下的STM32N6之RAM运行工程配置说明
微信公众号
手机版
学习学习
学习啦~~~