STM32H7启用DWT计数:解决ARMv7-M重置后无法计数问题
"这篇应用笔记(LAT1209)主要介绍了在Armv7-M架构的STM32微控制器,特别是STM32H7型号,如何启用数据观察和跟踪单元(DWT)进行计数,以便测量代码执行时间并评估效率。在启动DWT功能时,用户遇到的问题是设备复位或电源重置后,DWT无法正常工作。" 在Armv7-M架构的微控制器中,DWT是一个重要的调试工具,它可以提供精确的周期计数,这对于性能分析非常有用。问题的关键在于调试异常控制寄存器(DEMCR),在上电复位后,该寄存器的所有位默认为0。其中,DEMCR的第24位(即CoreDebug_DEMCR_TRCENA_Msk)需被设置为1,以启用包括DWT在内的调试模块。如果这一位保持为0,则DWT和仪器化触发模块(ITM)都会被禁用。 解决这个问题的步骤如下: 1. 首先,需要通过设置`CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk`来开启调试跟踪功能。 2. 然后,对于Cortex-M7核心的STM32芯片,需要解锁DWT访问寄存器(DWT-LAR)。这可以通过写入特定的密钥完成,即`DWT->LAR = 0xC5ACCE55`。 3. 清零周期计数器(`DWT->CYCCNT = 0`),以确保开始测量时计数值为0。 4. 最后,启用周期计数器(`DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk`),允许DWT开始计数CPU周期。 在CMSIS库提供的头文件,比如"core_cm7.h"中,已经定义了与这些寄存器操作相关的宏,使得编程更为简便。用户可以在自己的代码中包含这个头文件,并使用这些宏来实现DWT的启用和计数功能。 以下是一个示例代码片段,展示了如何使用DWT来测量代码执行所消耗的时钟周期: ```c #include "core_cm7.h" // 启用DWT和ITM CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // 解锁DWT DWT->LAR = 0xC5ACCE55; // 清零CYCCNT计数器 DWT->CYCCNT = 0; // 启用CYCCNT计数器 DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; // 保存初始计数值 uint32_t cycles = DWT->CYCCNT; // 你的代码... // ... // 计算执行周期 cycles = DWT->CYCCNT - cycles; ``` 通过这样的方法,开发者可以准确地获取代码执行的时钟周期数,从而评估程序的运行效率。此方法不仅适用于STM32H7,也可以适用于其他基于Cortex-M7内核的微控制器,但需要注意不同内核可能需要不同的解锁步骤,应根据具体的硬件手册进行调整。
![](https://csdnimg.cn/release/download_crawler_static/88971316/bg1.jpg)
下载后可阅读完整内容,剩余4页未读,立即下载
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/5671098e354d4349a885dbe6bdb22d5d_u014319604.jpg!1)
- 粉丝: 1651
- 资源: 157
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)