今天,写一个模组的开机时序时发现开不了机,各种查配置,最后定位到问题出现在延时函数
发现这个 延时2.5结果只延时了不到1S,而我模组的开机时序中这里最少需要2S所以一直无法开机,那就查延时函数吧
怀疑系统配置有问题,但是我串口的波特率都是OK的,疑惑........
手写了个2.5S左右的I++,模组成功开机,说明问题一定出在延时函数了,各种检查延时函数都没发现问题,烦死个人!
我就想找找其中的规律,我测试了一个delay_us(50000);是准确的50ms.......我懵逼了,因为delay_us和delay_ms的原理是一模一样......
于是我用us封装了一个ms延时,
实测OK,虽然问题解决了,但是不知道原因,再研究研究.......
我仔细看了原delay_ms的代码,发现一个装载值 SysTick->LOAD=(u32)nms*fac_ms;
我猜测是不是我2500ms导致装载值超出了,我把fac_ms打到日志发现是9000,9000*2500< (u32)啊....
内核文件里也没规定范围,我还是怀疑这个问题,所以我试了 delay_ms(1000),结果时间是OK的!!!
最后我实验到1800是OK的,1900基本就是0了,所以我认为是这个装载值不能超过某个值
所以我重新包装了一个S级延时