打印
[AT32F403/403A]

经 I-A-R 编译后,同样 for 循环,延时的时间长度相差两三倍。

[复制链接]
48|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
玄德|  楼主 | 2024-10-8 16:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


使用 AT32F403ACGT7 芯片,for( i=0; i <0x8000000; i++   ); 语句,
做不考虑精度的延时,比如 LED 亮、灭时间的长短。

以前正常的版本是 v31,亮灭的时间长短经过调整,一直很合适。
复制 v31 整个工程项目,命名为 v32 。做了少量的修改,我发誓和下面的问题无关。

现在,同样的 I-A-R 版本,同一块硬件电路板,同样的 for 语句,下载、运行,
发现 LED 亮灭时间明显变长,v32 的时间是 v31 的 2~3 倍,很明显。

顺便说一下,同样的情况,大概五六年前在 STM32F407VGT6 芯片上也遇到过。

下面的帖子将把我的努力和结果发上来,供大家参考、会诊。



使用特权

评论回复
沙发
玄德|  楼主 | 2024-10-8 16:32 | 只看该作者
本帖最后由 玄德 于 2024-10-8 16:39 编辑


首先想到的就是观察 for 语句的汇编语言是否相同。
分别打开 v31、v32 ,发现汇编语句是完全相同的。

如下图:



证明不是汇编造成的问题。


使用特权

评论回复
板凳
玄德|  楼主 | 2024-10-8 16:33 | 只看该作者
本帖最后由 玄德 于 2024-10-8 16:42 编辑


其次就怀疑时钟设置不同,v31 的频率高, v32 不知什么原因变低了。利用芯片的 pA8 引脚,输出内部的时钟信号,分频选择为 4 分频。

用示波器观察,无论 v31 还是 v32,pA8 输出的都是 48MHz 时钟,如下图:





使用特权

评论回复
地板
玄德|  楼主 | 2024-10-8 16:44 | 只看该作者

至此再想不到其他原因。
特来求助。
@ArteryMCU     @ArterySW




使用特权

评论回复
5
Diyer123| | 2024-10-8 20:20 | 只看该作者
很可能是:
1-中断服务。验证方法是关闭全局中断
2-Flash访问时间参数不同

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:有事请找 xuander

153

主题

5909

帖子

44

粉丝