求CH32V307VCT6 高精度计时器用法代码

我想用CH32V307VCT6的基本定时器TIM6来实现高精度延时1us和1ms,请给一个demo代码,谢谢!

您好,附件为参考例程,可以简单参考一下

icon_rar.gifCH32V307 TIM6延时.zip



您的代码使用了中断处理函数,但我的想法是能否不用中断处理函数来实现延时?就像CH32V307EVT例程里面的:

void Delay_Us(uint32_t n)

{

? uint32_t i;

? SysTick->SR &= ~(1 << 0);

? i = (uint32_t)n * p_us;

? SysTick->CMP = i;

? SysTick->CTLR |= (1 << 4) | (1 << 5) | (1 << 0);

? while((SysTick->SR & (1 << 0)) != (1 << 0)) ;

? SysTick->CTLR &= ~(1 << 0);

}

这个里面使用的是SysTick,我的想法是能否用TIM6代替SysTick来完成延时的功能?
或者说,能否直接操作TIM6的寄存器来实现延时功能?谢谢。


j_0012.gif3楼你这想法是要用定时器来实现多组软定时器,百度一下这种的会很多。

如果用纯C实现,原则上就是定义一个软定时数组,然后systick每1ms去判断软定时器数组里面的模式进行软时间的加、减,最后根据加、减修改状态。

可以参考https://blog.csdn.net/qq_39400113/article/details/120500872这个。


在裸机中,我一般都不用这种,而是在每个独立的C里面直接判断systick间隔差来执行,这样的话可以避免各个C之间的代码耦合问题。


只有登录才能回复,可以选择微信账号登录