stm32单片机程序运行时间计时程序

能够计时某段stm32f429单片机程序运行时间的程序,开始计时函数和结束计时函数,结束时通过printf输出运行时间。

使用DWT (Data Watchpoint and Trace)单元来实现高精度计时,这是Cortex-M4核心的一个功能:

要使用这段代码需要注意:

  1. 需要确保你的工程中已经正确配置了串口打印功能(重定向了printf)

  2. 如果你的系统时钟不是180MHz,需要修改endTimer()中的除数

  3. 计时精度取决于CPU频率,180MHz时精度约为5.56ns

  4. 计时器是32位的,在180MHz时大约能测量最大23.8秒

    • 最大时间 = (2^32) / 180,000,000 ≈ 23.8秒
  5. 如果需要测量更长时间,可以修改代码使用64位变量存储时间

#include "stm32f4xx.h"
#include <stdio.h>

// 初始化DWT
void DWT_Init(void)
{
    // 使能DWT外设
    CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
    
    // 清空DWT CYCCNT计数器
    DWT->CYCCNT = 0;
    
    // 使能CPU周期计数器
    DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}

// 获取当前CPU计数值
uint32_t getDwtCnt(void)
{
    return DWT->CYCCNT;
}

// 开始计时
uint32_t startTime = 0;
void startTimer(void)
{
    startTime = getDwtCnt();
}

// 结束计时并打印运行时间
void endTimer(void)
{
    uint32_t endTime = getDwtCnt();
    uint32_t cycles = endTime - startTime;
    
    // 假设系统时钟为180MHz
    float timeUs = (float)cycles / 180.0f;  // 微秒
    float timeMs = timeUs / 1000.0f;        // 毫秒
    
    printf("Runtime: %.2f us (%.2f ms)\r\n", timeUs, timeMs);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值