关于GD32如何使用定时器US级计时

 首先是初始话函数,这里我使用定时器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

非常好用!

 

对于GD32F130微控制器,它具有多个定时器,可以用来实现1微秒的定时功能。其中,TIM1是一个16位的高定时器,可以用于产生1微秒的定时。下面是一个简单的示例代码,展示了如何配置和使用TIM1来实现1微秒的定时功能: ```c #include "gd32f1x0.h" void timer_init(void) { /* 使能TIM1时钟 */ rcu_periph_clock_enable(RCU_TIMER1); /* 配置TIM1基本参数 */ timer_parameter_struct timer_initpara; timer_struct_para_init(&timer_initpara); timer_initpara.prescaler = 71; // 设置预分频器,将主频分频为72MHz timer_initpara.counter_mode = TIMER_COUNTER_UP; // 向上计数模式 timer_initpara.period = 1; // 设置重载值,总计数为2 timer_initpara.clock_division = TIMER_CKDIV_DIV1; // 时钟分频系数,不分频 timer_initpara.repetition_counter = 0; // 重复计数器,不使用 timer_init(TIMER1, &timer_initpara); /* 使能TIM1更新事件中断 */ timer_interrupt_enable(TIMER1, TIMER_INT_UP); /* 使能TIM1 */ timer_enable(TIMER1); } int main(void) { /* 初始化定时器 */ timer_init(); while (1) { /* 在这里执行你的代码逻辑 */ } } ``` 这个示例代码中,我们通过设置TIM1的预分频器为71,将主频分频为72MHz。然后将重载值设置为1,这样总计数为2。因此,每个计数单位为1/72MHz,也就是大约1.39ns。通过使用TIM1的更新事件中断,你可以在中断处理函数中实现1微秒的定时功能。 请注意,你需要根据自己的具体需求和系统时钟频率进行相应的配置和调整。同时,还需要根据具体的应用场景,合理选择定时器和其它外设进行配合使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值