专栏名称: EEPW
关注EEPW电子产品世界网,获取电子行业的最新资讯和最具价值的技术参考。
今天看啥  ›  专栏  ›  EEPW

在KEIL中勾选微库后,延时函数为什么不准了?

EEPW  · 公众号  ·  · 2024-08-02 11:10

文章预览

最近一工程师向我反馈了一个问题,他使用ARM Cortex-M0+的MCU,在使用延时函数std_delayms延时1s时,如果勾选了KEIL中的Use MicroLIB会导致延时有5%的计时偏差,不勾选的话误差只有1%。 首先进行问题的复现,在程序中while(1)里调用std_delayms(1000),通过串口发送一个字符,在上位机上进行接收,可以清楚的看到勾选微库之后误差确实明显增大,每次偏差大约为50ms。 这个现象看着比较奇怪,刚开始时也困扰了我,那么到底是什么原因呢? 首先要看延时函数是如何实现的, std_delayms函数是通过systick定时器来实现,采用的是阻塞的方式,实现代码如下: /** * @brief us级延时函数(阻塞模式) * @param count 计数周期 * @note 延时函数最大值受限于SysTick重载值寄存器的最大值0xFFFFFF(16777216) * @note 该函数为weak函数,用户可选择其他定时器重新定义实现该函数 * @retval ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览