[AT32F435] 雅特力 AT32F435 高频运行实战:时钟树、Flash 等待周期与外设分频

[复制链接]
23|0
【雅特力 AT32F435 高频运行实战】

AT32F435 主频 288 MHz,是国产 M4 里频率较高的一颗。很多人在使用时会遇到主频上不去、或跑高频后偶发死机的问题,原因往往集中在时钟配置与 Flash 等待周期上。

一、时钟树:三段分频别搞混

AT32F435 的时钟路径可以概括为三段:

1、时钟源,外部晶振或内部时钟;
2、PLL:输入分频 → 倍频 → 系统时钟分频;
3、AHB、APB1、APB2 总线分频。

288 MHz 的典型配置是 8 MHz 晶振进 PLL,倍频到 288 MHz 后经 AHB 分频送给内核与总线。注意 APB1 有频率上限,超过之后定时器时钟虽然有倍频补偿,但外设本身可能工作异常。

二、Flash 等待周期必须跟着主频调

这是高频跑飞最常见的原因。Flash 读取速度跟不上内核,就必须插入等待周期:

- 主频越高,需要的等待周期越多;
- 如果启用了预取与指令缓存,可以适当减少等待周期,但要在使能之后再调;
- 修改主频后如果忘记同步修改等待周期,表现通常是大部分时候正常、偶发取指错误,非常难查。

建议把等待周期配置与主频设置写在一起,用一个宏统一控制,避免改频率时漏改。

三、外设分频与实际效果

1、定时器时钟并不是简单的 APB 分频值。当 APB 分频系数不为 1 时,定时器时钟会按 2 倍关系补偿。很多人 PWM 频率算错就是因为忽略了这一点;
2、ADC 时钟需要单独确认上限,不能直接用系统时钟分频;
3、高速外设(QSPI、SDIO、USB)在 288 MHz 下要重新验证时序余量,尤其 QSPI 在长走线时可能需要降低时钟或增加 dummy cycle。

四、实测建议

1、先用内部时钟跑通逻辑,再切外部晶振,能快速区分是晶振问题还是配置问题;
2、把主频配置做成可切换的宏,方便在 288 MHz 与 144 MHz 之间对比定位;
3、如果出现偶发死机,先怀疑 Flash 等待周期与供电,其次才是代码逻辑;
4、调试时用 MCO 引脚输出时钟,用示波器直接看波形,比查寄存器快得多。

五、小结

高频 MCU 的坑,八成出在时钟配置没有成套修改上。记住一条原则:主频、Flash 等待周期、总线分频、外设时钟上限,这四项必须一起调整、一起验证。

以上基于 AT32F435 实测。AT32F437 的时钟结构基本一致,可以直接参考。欢迎交流。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

397

主题

3248

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部
0