首先是初始话函数,这里我使用定时器2
void timer2_init(uint16_t pre, uint16_t per)
{
timer_disable(TIMER2);
/* 开启时钟 */
rcu_periph_clock_enable(RCU_TIMER2);
/* 复位定时器 */
timer_deinit(TIMER2);
timer_parameter_struct timer_initpara; // 定义定时器结构体
/* 配置定时器参数 */
timer_initpara.prescaler = pre;// -1; // 时钟预分频值 0-65535 psc_clk = CK_TIMER / pre
timer_initpara.alignedmode = TIMER_COUNTER_EDGE; // 边缘对齐
timer_initpara.counterdirection = TIMER_COUNTER_UP; // 向上计数
timer_initpara.period = per;// - 1; // 周期
timer_initpara.clockdivision = TIMER_CKDIV_DIV1; // 分频因子
timer_initpara.repetitioncounter = 0; // 重复计数器 0-255
timer_init(TIMER2,&timer_initpara); // 初始化定时器
/* 使能中断 */
timer_interrupt_enable(TIMER2, TIMER_INT_UP); // 使能更新事件中断
/* 使能定时器 */
timer_enable(TIMER2);
}
因为主频率为120MHz
timer2_init(119,0xffff);
所以初始化完成之后就可以计时了
do
{
timer_counter_value_config(TIMER2,0);//计数清零
//中间为测量需要运行多少时间的代码
sd_spi_write_sector(25000+addrtmp,(uint8_t *)ADCValue456);
addrtmp++;
printf("tim%d:%d us\r\n",addrtmp,timer_counter_read(TIMER2));//输出计数
}while(a--);
运行之后就可以看到代码需要运行多长时间了
tim189:10074 us
tim190:8736 us
tim191:2570 us
tim192:3817 us
tim193:10063 us
tim194:8716 us
tim195:2514 us
tim196:3756 us
tim197:9374 us
tim198:8802 us
tim199:2550 us
tim200:3806 us
tim201:10043 us
tim202:8057 us
非常好用!