本帖最后由 Alden 于 2022-6-9 21:48 编辑
#申请原创# #技术资源#
APM32E103系列与GD32F103系列都是兼容STM32系列。但是有朋友使用GD的库开发,换成APM或者ST的发现系统运行有问题。
经过一番对比,发现根本原因在于GD的时钟配置寄存器与APM和ST有差异导致。
APM的时钟配置寄存器(RCM_CFG)与GD的时钟配置寄存器(RCU_CFG0)都是对MCU时钟控制的主要寄存器,其功能相同,但部分位的定义存在一定差异。下面是该寄存器的主要差异点。
寄存器对比来源为《APM32E103xCxE用户手册 V1.1》,《GD32F10x_yonghushouce_Rev2.5》。
由上表的寄存器对比可以看出,APM和GD的时钟配置寄存器,大部分定义和功能都是相同的,只有ADC、USB和PLL的寄存器配置存在一定差异,APM相对GD增加FPU和SDRAM外设,其时钟预分频配置就这这个时钟配置寄存器中。
ADC和USB的时钟差异在使用时需要对比注意下。
PLL的差异在程序启动时就有很大影响,下面主要讲讲GD库中兼容APM的时钟配置的差异点修改。
测试平台:APM32E103ZET6,外部晶振使用8Mhz的。
测试代码:GD官方SDK(GD32F10x_Firmware_Library_V2.2.2)
APM32E103系列最高支持主频为120Mhz,下面就尝试在GD库中将主频配置为120Mhz运行。
GD例程包中的程序可以直接通过串口将时钟配置打印出来,我们只需要看串口输出的波特率和打印的数据是否正确来判断是否配置成功。
1、首先确认外部晶振频率的定义是实际使用的晶振频率。
2、GD库中没有120M主频的配置,为了方便就直接在108M配置的基础上进行修改,将宏定义改为(uint_32t)(120000000)。
3、将下图时钟初始化中注释掉的部分改为下面的内容。
这就涉及之前提到的时钟配置寄存器的差异,APM32E103的PLL倍频系数最大为16,GD的配置会将外部晶振频率2分频后再乘很大的倍频系数,而APM的就不需要2分频,直接8Mhz*15就能得到120Mhz,但是别忘了配置flash等待周期。
修改后就可以烧录进行验证,可以看到串口正确打印了系统各时钟的频率数值,证明修改的是正确的。
APM32E103xCxE用户手册 V1.1.pdf
(9.3 MB)
GD32F10x_Firmware_Library_V2.2.2.zip
(5.69 MB)
|