【雅特力 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 的时钟结构基本一致,可以直接参考。欢迎交流。 |
|