文章目录
- 前言
- 背景
- 二、使用步骤
- 软件模拟仿真
- 连接实物在线仿真
- 使用代码来计算某个模块或函数等的运行时间
- 总结
前言
本文参考了KEIL 下如何准确测量代码执行时间?与正点原子的STM32F1开发指南-寄存器版本_V3.3.pdf
提示:以下是本篇文章正文内容,下面案例可供参考
背景
使用的板子是STM32F103ZET6
二、使用步骤
分为连接板子进行在线仿真与软件仿真。
软件模拟仿真
首先按照原子哥上文pdf对魔术棒进行配置。
1.配置Target部分外部时钟晶振为8MHz(与实际一致)!
2.Debug选项卡配置Dialog DLL及相应的Parameter
然后开始仿真即可。右下角可以查看时间,还是挺准的,可以摸个底
连接实物在线仿真
要注意一个问题!
下面设置内核频率这里,需要把默认的10M改为我们实际使用的比如72MHz!!!,然后测量就会很准确
使用代码来计算某个模块或函数等的运行时间
以使用基本定时器TIM3为例
timer.h
void TIM3_Int_Init(u16 arr,u16 psc);
extern u32 count ;
#endif
timer.c
#include "timer.h"
u32 count = 0;
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)
{
count++;
}
TIM3->SR&=~(1<<0);
}
void TIM3_Int_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;
TIM3->ARR=arr;
TIM3->PSC=psc;
TIM3->DIER|=1<<0;
TIM3->CR1|=0x01;
MY_NVIC_Init(1,3,TIM3_IRQn,2);
}
实际使用部分main.c
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "timer.h"
u32 start_count = 0;
u32 end_count = 0;
u32 time;
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
LED_Init();
TIM3_Int_Init(65535-1,7199);//10KHz的计数频率,计数6.5535s之后溢出。
while(1)
{
count = 0;
TIM3->CNT = 0;
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
end_count = TIM3->CNT;
time = (end_count + count *65535) / 10; //单位ms
delay_ms(50);
}
}
总结
hh