第一次延时正常,后续就不对了
应该是启动后不是自动关闭的
问题:
1、cmp是64位的寄存器,运算延时用的32位的,导致可用延时长度比较短,这个大多数遇不到
2、systick的ctrl寄存器启动清零了计数器,但是不会清除比较标志,而比较在完成后,并不会停止,如果前一次是短延时,比如2us的,则下次就直接失效了,在启动之前清一下标志,延时就对了
因为没有这个模块的手册,以上是根据程序猜测的
uint32_t i;
SysTick->CTLR = 0;
i = (uint32_t)n*p_ms;
SysTick->CMP = i;
SysTick->CTLR = (1<<8)|(1<<0);
while((SysTick->CNTFG & (1<<1)) != (1<<1));
SysTick->CNTFG &= ~(1<<1); |