我想用CH32V307VCT6的基本定时器TIM6来实现高精度延时1us和1ms,请给一个demo代码,谢谢!
您的代码使用了中断处理函数,但我的想法是能否不用中断处理函数来实现延时?就像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的寄存器来实现延时功能?谢谢。
3楼你这想法是要用定时器来实现多组软定时器,百度一下这种的会很多。
如果用纯C实现,原则上就是定义一个软定时数组,然后systick每1ms去判断软定时器数组里面的模式进行软时间的加、减,最后根据加、减修改状态。
可以参考https://blog.csdn.net/qq_39400113/article/details/120500872这个。
在裸机中,我一般都不用这种,而是在每个独立的C里面直接判断systick间隔差来执行,这样的话可以避免各个C之间的代码耦合问题。