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

2024-09-05 14779阅读

1. 前言

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

2. 引脚兼容性

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

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

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

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 项目;

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

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

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

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

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

x: \GD32F30x_Firmware_Library_V2.0.2\Firmware\CMSIS

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

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

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

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

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

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”中:

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

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

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

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

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

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

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

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

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

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 所示:

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

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

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

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

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

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

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

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

5. 外设差异性

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

5.1 电源管理单元(PMU)

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

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

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

【GD32 MCU 移植教程】2、从 GD32F303 移植到 GD32F503 图 5.1 GD32E503 GPIO 口

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

【GD32 MCU 移植教程】2、从 GD32F303 移植到 GD32F503 图 5.2 GD32F303 GPIO 口设置为 I2C 功能设置

【GD32 MCU 移植教程】2、从 GD32F303 移植到 GD32F503 图 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教程,关注聚沃科技官网

文章版权声明:除非注明,否则均为天创资讯网原创文章,转载或复制请以超链接形式并注明出处。