V3.5库函数对F103初始化可能存在的风险
在IAR隐含的启动代码中(main 运行之前),调用了system_stm32f10x.c/SystemInit程序
其中有一个SetSysClock()子程序;这个子程序是假定你的外部时钟是8M的情况下设置时钟的。
如果你的板子使用的是8M外部时钟,那么SetSysClock会将MCU初始化到72M运行,
但是如果你的板子的外部时钟,高于8M,例如是16M,那么会将MCU初始化到144M运行。
我的某项目是使用16M外部时钟的,在main()之后按照16M对PLL做了设置,MCU运行在72M.
显然这样是存在风险的,上电后MCU 的运行时钟变化如下:
8M(内部时钟)->144M->72M
当然144M运行的时间很短,但是MCU按照这个速度访问Flash 是不安全的!
个人认为,如果外部时钟高于8M的话,应该去掉SetSysClock()子程序。
也许应该这样来写SetSysClock()子程序:
1. 利用 HSI 校准 LSI
2. 利用 LSI 估算 HSE 大致的频率;
3。决定 PLL 的倍频系数;
或者: 在PLL倍频的时候考虑到HSE_VALUE的值。 |