问题描述:
使用GD103系列,使用GD的bootloader例程和IAP 的USB在线升级工具,对app程序进行升级,app程序使用ST的标准库进行编写,app不加偏移地址时可以正常运行,但是加载偏移地址后,由bootloader进行跳入后程序跑飞或串口打印信息不对
原因:
ST的RCC_CFGR寄存器和RCU_CFG0寄存器有差异,如图5-1,ST的1821位最大倍频系数为9,而且第28位为保留位。GD的1821位最大分频系数为32,而且和第27位有关,GD的从29位起才是保留位,所以配置时要注意其它位的配置。客户使用GD的bootloader例程中系统时钟是96MHZ,即倍频系数为24Mhz,此时会将第27位置1,所以当跳转到app时,app使用的是ST的库,初始化系统时钟的时钟不能将这个位进行清楚,导致了后面的时钟配置倍频系数不是想要的,出现串口打印乱码或程序跑飞的现象;而直接运行app可行,是因为第27位默认为0.
解决方案:
首先在进入APP程序时先将第27位进行清0.