msr默认工程内置的延迟函数与实际对应时间严重不符

如题,设置50000ms(50秒)的延迟,实际led只亮了大约1秒左右


1730254074196334.png

1730254074131131.png


您好,如下图,重装载数值寄存器的大小是24位有效位,可配置最大值为16777216,当配置延时50000ms时,LOAD的值为450000000,超过16777216了。若要配置长时间的延时,可以使用for循环或者while循环,每次循环1s,循环50次即可。

image.png


这种我都是用一个定时器1ms中断做时基,然后各种定时都是在1ms中断里面累计。

1ms中断里面分别实现2ms/5ms/10ms/50ms/100ms/1S时基变量,应用起来不要太爽。


    void delayEightTick(volatile uint32 eight_tick) {

        for (;eight_tick != 0;eight_tick--) {

        }

    }

    static const uint32 Tick_par_second = 12 * 8000000;

    void delayEightTick(volatile uint32 eight_tick);

    #definedelayMs(ms) delayEightTick( (uint32)( ( ms * (Tick_par_second/1000) )/8.0f+0.5f) )

也许你需要CPU忙等的实现方法


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