Alden 发表于 2022-6-9 21:48

APM32E103兼容GD32F103,时钟配置差异点

本帖最后由 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等待周期。
      修改后就可以烧录进行验证,可以看到串口正确打印了系统各时钟的频率数值,证明修改的是正确的。










huquanz711 发表于 2022-6-10 07:59

所以是不能完全兼容的,还是需要修改底层代码。

huquanz711 发表于 2022-6-10 08:20

写的详细啊,帮顶一下。

yujielun 发表于 2022-6-20 15:28

GD官方SDK在哪里?

七毛钱 发表于 2022-6-20 16:04

第一次看到这种国产芯片之间相互兼容的芯片

elsaflower 发表于 2022-6-20 16:18

这个跟stm32一样的吗?

jackcat 发表于 2022-6-20 16:52

差异点是哪些呢   

iamaiqiyi 发表于 2022-6-20 17:47

APM32E1系列跟f系列有什么不同呢?

mmbs 发表于 2022-6-20 20:29

是不是只是时钟有区别呢?

sheflynn 发表于 2022-6-21 20:36

这个是pin2pin兼容吗?

updownq 发表于 2022-6-21 21:34

兼容STM32系列怎么样?

quickman 发表于 2022-6-22 18:46

APM的时钟配置跟stm32一样 。

usysm 发表于 2022-6-22 19:36

GD32F103和APM32E103有什么不同?

zerorobert 发表于 2022-6-22 20:26

这个兼容stm32吗

1988020566 发表于 2022-7-9 13:03

谢谢楼主分享的资料了。   

cemaj 发表于 2022-7-9 13:34

APM32E103跟APM32F103兼容吗   

benjaminka 发表于 2022-7-9 14:40

可以直接下载吧。   

pmp 发表于 2022-7-9 16:05

这个时钟有什么问题吗   

uptown 发表于 2022-7-9 17:11

STM32能够直接下载的。   

typeof 发表于 2022-7-9 18:12

ST不需要修改的。   
页: [1] 2
查看完整版本: APM32E103兼容GD32F103,时钟配置差异点