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
”头文件内容:
图
4.6
7.
修改“
gd32f30x_misc.c
”文件内容:
图
4.7
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”中:
图
4.8
2.
把“
gd32e50x_pmu.c
” 复制到“
x:\GD32F30x_Firmware_Library_V2.0.2\Firmware\GD32F30x_standard_peripheral\Source”中:
图
4.9
3.
工程中的
Peripherals
中添加“
gd32e50x_pmu.c
”文件,并移去“
gd32f30x_pmu.c
”文件
4.
在“
gd32f30x_libopt.h
”文件中包含“
gd32e50x_pmu.h
”头文件。
图
4.11
5.
在“
gd32e50x_pmu.h
”文件中,把
#include "gd32e50x.h"
修改成
#include "gd32f30x.h"
;
图
4.12
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 所示:
2.
在
system_gd32f30x.c
文件中增加使用
180MHz
频率函数的声明,如图
4.14
所示:
图 4.14
180MHz
函数声明
3.
在
system_gd32f30x.c
文件中增加使用
180MHz
频率函数的定义:
static void system_clock_180m_hxtal(void)
{
uint32_t timeout = 0U;
uint32_t stab_flag = 0U;
/* enable HXTAL */
RCU_CTL |= RCU_CTL_HXTALEN;
/* wait until HXTAL is stable or the startup time is longer than
HXTAL_STARTUP_TIMEOUT*/
do{
timeout++;
stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB);
}while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout));
/* if fail */
if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){
while(1){
}
}
FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | WS_WSCNT(4);
RCU_APB1EN |= RCU_APB1EN_PMUEN;
/* HXTAL is stable */
/* AHB = SYSCLK */
RCU_CFG0 |= RCU_AHB_CKSYS_DIV1;
/* APB2 = AHB/1 */
RCU_CFG0 |= RCU_APB2_CKAHB_DIV1;
/* APB1 = AHB/2 */
RCU_CFG0 |= RCU_APB1_CKAHB_DIV2;
/* select HXTAL/2 as clock source */
RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0);
RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_CFG0_PREDV0);
/* CK_PLL = (CK_HXTAL/2) * 45 = 180 MHz */
RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4 | RCU_CFG0_PLLMF_5);
RCU_CFG0 |= RCU_PLL_MUL45;
/* enable PLL */
RCU_CTL |= RCU_CTL_PLLEN;
/* wait until PLL is stable */
while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){
}
/* enable the high-drive to extend the clock frequency to 180 MHz */
PMU_CTL0 |= PMU_CTL0_HDEN;
while(0U == (PMU_CS0 & PMU_CS0_HDRF)){
}
/* select the high-drive mode */
PMU_CTL0 |= PMU_CTL0_HDS;
while(0U == (PMU_CS0 & PMU_CS0_HDSRF)){
}
/* select PLL as system clock */
RCU_CFG0 &= ~RCU_CFG0_SCS;
RCU_CFG0 |= RCU_CKSYSSRC_PLL;
/* wait until PLL is selected as system clock */
while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){
}
}
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相关咨询:
https://www.gd32bbs.com/