【GD32 MCU 移植教程】2、从 GD32F303 移植到 GD32F503

描述

1. 前言

GD32E503 系列是 GD 推出的 Cortex_M33 系列产品,该系列资源上与 GD32F303 兼容度非常高,本应用笔记旨在帮助您快速将应用程序从 GD32F303 系列微控制器移植到 GD32E503 系列微控制器。

2. 引脚兼容性

GD32F303 与 GD32E503 在相同封装下是 Pin To Pin 兼容的。但由于 GD32E503 较 GD32F303多了 SHRTIMER、SQPI 功能,所以两者引脚定义有细微差别,如下表所示:

表 1 GD32F303 系列和 GD32E503 系列引脚区别

移植

3. 内部资源兼容性

下表给出了 GD32F303 与 GD32F503 的资源对比总览(以 GD32F303xE 和 GD32F503xE 对比为例):

表 2 GD32F303 系列和 GD32E503 系列内部资源对比总览

移植

4. 程序移植

由上节可看出 GD32F303 和 GD32F503 的主频(RCU 系统时钟)及内核版本都是有差异的,下面将就 RCU 方面阐述程序移植过程。

4.1 GD32F30x_Firmware_Library_V2.0.2 移植步骤

1. 本文将使用 GD32F30x_Firmware_Library_V2.0.2 固件库文件 Template 里的工程做示例,如下图 4.1 所示

移植

2. 电脑安装 keil5.26 及以上版本 MDK、GD32E50x 插件

移植

3. 原有工程项目可能是 keil4 建立的,直接在 keil4 工程后缀名添加 x,即变成 keil5 项目;

移植

4. 根据实际情况修改使用的芯片型号以及 C 语言语法改为 C99;

移植

 

移植

 

5. 拷贝 Cortex M33 内核支持文件及其他 keil5 所需的文件到:

x: \GD32F30x_Firmware_Library_V2.0.2\Firmware\CMSIS

移植

 

6. 修改“gd32f30x.h”头文件内容:

移植

7. 修改“gd32f30x_misc.c”文件内容:

移植

4.2 PMU 文件设置

GD32E503 的 PMU 与 GD32F303 寄存器并不兼容,因此需要把 GD32E503 的 PMU 配置文件及其文件加到 GD32F303 工程中。

1. 把“gd32e50x_pmu.h”复制到“x:\GD32F30x_Firmware_Library_V2.0.2\Firmware\GD32F30x_standard_peripheral\Include”中:

移植

 

 

2. 把“gd32e50x_pmu.c” 复制到“x:\GD32F30x_Firmware_Library_V2.0.2\Firmware\GD32F30x_standard_peripheral\Source”中:

移植

3. 工程中的 Peripherals 中添加“gd32e50x_pmu.c”文件,并移去“gd32f30x_pmu.c”文件

移植

 

4. 在“gd32f30x_libopt.h”文件中包含“gd32e50x_pmu.h”头文件。

移植

 

5. 在“gd32e50x_pmu.h”文件中,把#include "gd32e50x.h"修改成#include "gd32f30x.h";

移植

 

4.3 RCU 系统时钟配置

经过上诉的步骤后,我们的 GD32F303 已经完成了基本的 keil5 工程配置,下面将开始 RCU时钟的配置,GD32F303 系列和 GD32E503 系列的时钟配置过程基本相同,但是 GD32E503的 PMU 寄存器及 FMC 时钟配置有差异,另外 GD32E503 支持更高的系统时钟。用户在配置的时候可以按以下步骤进行程序修改(以 GD32F303 移植到 GD32E503、使用外部 8MHz高速晶振 HXTAL 为例,其他对应型号、使用内部晶振的移植过程类似):

1. 在 system_gd32f30x.c 文件中增加宏定义:

#define __SYSTEM_CLOCK_180M_PLL_HXTAL (uint32_t)(180000000)

如图 4.13 所示:

移植

图 4.13 在 system_gd32f30x.c 文件中增加宏定义

2. 在 system_gd32f30x.c 文件中增加使用 180MHz 频率函数的声明,如图 4.14 所示:

移植

3. 在 system_gd32f30x.c 文件中增加使用 180MHz 频率函数的定义:

移植

4. 在 system_gd32f30x.c 文件中增加使用 180MHz 频率函数的调用,如图 4.15 所示:

移植

 

5. 外设差异性

GD32E503 与 GD32F303 在外设上都是兼容的,但 GD32E503 作为更高级的 MCU,较GD32F303 在很多外设上增加了部分功能,用户可根据以下罗列出的外设差异性选择是否使用这些功能。

5.1 电源管理单元(PMU)

GD32F303 的电源管理单元只提供了三种省电模式,而 GD32E503 的电源管理单元提供了五种省电模式,包括睡眠模式,深度睡眠模式,深度睡眠模式1,深度睡眠模式 2 和待机模式。下表为节电模式总结,具体功能以及寄存器设置,请用户参考 GD32E50x 用户手册。

移植

5.2 通用和备用输入/输出接口欧(GPIO 和 AFIO)

移植图 5.1 GD32E503 GPIO 口

 

GD32E503 相对于 GD32F303,GPIO 口的功能更丰富了,除了重映射功能外,AFIO 功能也分为 Alternate1、Alternate2(如上截图 5.1 所示),Alternate2 的功能使用方法与 GD32F303 一样:配置 IO 口为复用模式,再使能相应外设即可,在使用 Alternate1 的复用功能的时候需要设置还需要多设置 AFIO 端口配置寄存器,以下以 I2C 的 IO 口设置为例。

移植图 5.2 GD32F303 GPIO 口设置为 I2C 功能设置

 

移植图 5.3 GD32F503 GPIO 口设置为 I2C 功能设置

5.3 模数转换器(ADC)

1. 供电范围

GD32F303 的 VDDA 供电范围为 2.6~3.6V。GD32E503 的 VDDA 供电范围为 1.62~3.6V,GD32E503 的供电范围更宽。

2. 时钟频率

GD32F303 的 ADC 最大时钟频率可达 40MHz。GD32E503 在不同的供电范围内,ADC的最大可达的时钟频率是不一样的:1.62V 到 2.4V,ADC 最大时钟频率可达 14MHz;2.4V到 3.6V,ADC 最大时钟频率可达 35MHz。

3. 框图

GD32F303 ADC0、ADC1、ADC2 共用一个模块框图,而 GD32E503 ADC0、ADC1 共用一个模块框图,ADC2 则是一个模块框图。

4. 模拟看门狗

GD32F303 支持一个模拟看门狗功能,GD32E503 支持三个模拟看门狗 0/1/2。

5. 触发源

GD32E503 的 ADC 外部触发相对于 GD32F303 新增了超高精度 TIEMR 的触发源。

6. 单端和差分输入通道

GD32F303 只支持单端输入模式。GD32E503 可通过配置 ADC_DIFCTL 寄存器中的DIFCTL[14:0]位域,可以配置 ADC 通道为单端输入模式或差分输入模式。只有在 ADC 禁能(ADCON = 0)的情况下才能进行该配置。

上诉几点为 GD32F303 和 GD32E503 的 ADC 的差异,具体功能以及寄存器设置,请用户参考 GD32E50x 用户手册。

5.4 数模转换器(DAC)

GD32E503 较 GD32F303 的 DAC 触发源增加了高精度定时器 SHRTIMER 提供的触发源。GD32E503 在数据保持寄存器和输出寄存器之间有一个 4 位深度的数据 FIFO,如果设置了相应的中断使能位,则在发生过载或欠载时将产生中断。具体功能以及寄存器设置,请用户参考 GD32E50x 用户手册。

5.5 通用同步异步收发器(USART)

USARTx(0~4):

GD32E503 与 GD32F303 一样,有 USART0~2,UART3~4,其中 GD32F303 仅支持 16 倍过采样,最高速度可到 7.5MBits/s;GD32E503 支持 8 或 16 倍过采样,最高速度可到22.5MBits/s。USART 中断事件,GD32E503 较 GD32F303 多增加了 “检测到冲突”事件。

GD32E503 所有的 USART 都支持 DMA 功能。GD32F303 的 UART4 不支持 DMA 功能。

USART5:

GD32E503 还增设了 USART5,对比 USART0~4 这几个串口的功能,多加了半双工单线通信,接收 FIFO 功能,双时钟域,可互换 TX/RX 引脚,可配置的数据极性,自动检测波特率,支持 RS485 驱动使能,支持 ModBus 通信,从深度睡眠模式,深度睡眠模式 1 和深度睡眠模式 2 唤醒,奇偶校验位控制,具体功能以及寄存器设置,请用户参考 GD32E50x 用户手册。

5.6 内部集成电路总线接口(I²C)

I2C0~I2C1:

GD32E503 较 GD32F303 多支持了 SAM_V 模式。

I2C2:

GD32E503 还增设了 I2C2,I2C2 除了部分特征与 I2C0、I2C1 一样外,还具有如下的特征:

支持多个 7 位从机地址,可编程的建立时间和保持时间,兼容 SMBus 3.0 和 PMBus 1.3,可选择的 PEC(报文错误校验)生产和校验;地址匹配时,可由深度睡眠模式,深度睡眠模式1 和深度睡眠模式 2 唤醒;独立于 PCLK 的时钟,可以独立操作 I2C。

GD32F303 的 I2C 寄存器可以按半字(16 位)或字(32 位)访问。GD32E503 的 I2C 寄存器只能按字(32 位)访问,具体的功能及寄存器设置,请用户参考 GD32E50x 用户手册。

5.7 串行外设接口/片上音频接口(SPI/I²S)

GD32E503 较 GD32F303,I2S 支持全双工模式,I2S1 和 I2S2 为了支持全双工运行模式,需要两个额外的片上I2S模块:I2S_ADD1 和 I2S_ADD2。I2S_ADD_SD引脚是I2S_ADD模块的数据引脚,具体功能以及寄存器设置,请用户参考GD32E50x用户手册。

5.8 控制器局域网络 (CAN)

GD32F303 系列产品中只有一个 CAN0 功能,具有 14 个过滤器,GD32E503 具有两个 CAN,CAN0 和 CAN1,他们共享 28 个过滤器,GD32E503 较 GD32F303 还支持支持 CAN-FD帧,CAN-FD 帧通信波特率最大为 6Mbit/s,支持传输延迟补偿机制,具体功能以及寄存器设置,请用户参考 GD32E50x 用户手册。

5.9 闪存控制器(FMC)

GD32F303 bank0 的闪存页大小为 2KB,bank1 的闪存页大小为 4KB;GD32E503 的闪存页大小为 8KB。GD32F303 在闪存的前 256K 字节空间内,CPU 执行指令零等待,在此范围外,CPU 读取指令存在较长延时;而 GD32E503 在闪存的前 512K 字节空间内,CPU 执行指令需要少量等待时间。另外 GD32E503 增加了 2K 字节 OTP 块(一次性编程),用于存储用户数据;具体功能以及寄存器设置,请用户参考 GD32E50x 用户手册。

5.10 其他

GD32E503 还增加了 SHRTIMER、TMU 和 SQPI 等功能,具体功能以及寄存器设置,请用户参考 GD32E50x 用户手册。

教程GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分