我想用CH32V307VCT6的基本定時器TIM6來實現(xiàn)高精度延時1us和1ms,請給一個demo代碼,謝謝!
您的代碼使用了中斷處理函數(shù),但我的想法是能否不用中斷處理函數(shù)來實現(xiàn)延時?就像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的寄存器來實現(xiàn)延時功能?謝謝。
3樓你這想法是要用定時器來實現(xiàn)多組軟定時器,百度一下這種的會很多。
如果用純C實現(xiàn),原則上就是定義一個軟定時數(shù)組,然后systick每1ms去判斷軟定時器數(shù)組里面的模式進行軟時間的加、減,最后根據(jù)加、減修改狀態(tài)。
可以參考https://blog.csdn.net/qq_39400113/article/details/120500872這個。
在裸機中,我一般都不用這種,而是在每個獨立的C里面直接判斷systick間隔差來執(zhí)行,這樣的話可以避免各個C之間的代碼耦合問題。