专栏名称: 面包板社区
面包板社区——中国第一电子人社交平台 面包板社区是Aspencore旗下媒体,整合了电子工程专辑、电子技术设计、国际电子商情丰富资源。社区包括论坛、博客、问答,拥有超过250万注册用户,加入面包板社区,从菜鸟变大神,打造您的电子人脉社交圈!
TodayRss-海外RSS稳定源
目录
今天看啥  ›  专栏  ›  面包板社区

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

面包板社区  · 公众号  ·  · 2025-08-29 14:55
    

主要观点总结

工程师使用ARM Cortex-M0+的MCU时,在延时函数std_delayms中遇到计时偏差问题,发现与MicroLIB库有关。通过分析和测试,确定是MicroLib库中的除法运算导致的延时。对此,文章提供了解决方案和背后的原理分析。

关键观点总结

关键观点1: 问题现象

使用ARM Cortex-M0+的MCU时,std_delayms延时1s时,勾选KEIL中的Use MicroLIB会导致延时有5%的计时偏差。

关键观点2: 问题分析

分析std_delayms函数实现,发现延时函数通过systick定时器实现,而问题出在SystemCoreClock/1000000这个除法运算上,MicroLib库的执行导致除法运算执行更慢。

关键观点3: 实验验证

通过测试代码执行时间,发现勾选MicroLib后,执行时间为49us,不勾选为9us,验证了之前的分析。

关键观点4: 解决方案

为了减小定时误差,可以不使用除法运算,或者在主频变化的情况下更新一次除法运算即可。

关键观点5: MicroLib库的特点

MicroLib库可以减小代码空间占用,但有些函数执行时间会变长。ARM Cortex-M0+没有硬件除法器,除法是相对复杂的操作。


免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

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