1. 前言
本应用笔记旨在帮助您快速将基于 GD32F10x 2.0 版本及以上固件库开发的应用程序从GD32F10x 系列微控制器移植到 GD32E103 系列微控制器。GD32E103 和 GD32F10x 系列相比,考虑软硬件兼容性,从 Flash 和 SRAM 容量,包括外设模块的增强性能上来看,E103 最接近 F105。
开始前您需要安装 GD32E103 关于 KEIL 或 IAR 的插件,在工程选项的器件条目中选择GD32E103 对应型号,添加 GD32E103 的 Flash 下载算法。
为了更好的利用本应用笔记中的信息,您需要对 GD32 系列微控制器有比较深刻的了解。您可在 GD32MCU 资料网站 下载 GD32 各系列微控制器资料,如 Datasheet、用户手册、官方例程及各种开发工具等。
2. 引脚兼容性
GD32F10x 与 GD32E103 在相同封装下是 Pin To Pin 兼容的,需注意 E103 没有 144Pin 封装。但由于 GD32E103 较 GD32F10x 增加了内部 48MHz RC 振荡器给 USBFS 模块提供固定频率,为满足精度要求,GD32E103 含有一个时钟校准控制器(CTC),所以两者引脚定义有细微差别,如下表所示:
表 1 GD32F105 系列和 GD32E103 系列引脚区别
3. 内部资源兼容性
GD32E103 在资源上是和互联型产品如 F105 接近。下表给出了 GD32F10x 与GD32E103 的资源对比总览(以 GD32F105VB 和 GD32E103VB 对比为例):
表 2 GD32F10x 系列和 GD32E103 系列内部资源对比总览
4. 程序移植
GD32E103 外设上和时钟与 GD32F10x 互联系列兼容,所以移植基于 GD32F10x 2.0版本及以上固件库应用程序到 E103 上需要做部分修改和调整。
4.1 IDE 设置
(1) 使用 MDK 环境时,在工程选项 C/C++选项卡中 Preprocessor Symbol Define 中加入GD32F10X_CL 的宏定义。
图 1 修改全局声明
(2) 使用 IAR 环境时,在工程选项 C/C++ Compiler 项中 Preprocessor 选项卡下 DefineSymbol 中加入 GD32F10X_CL 的宏定义。
4.2 FMC 外设文件替换
GD32E103 采用了全新的 Flash 架构。GD32E103 的 flash 编程上支持的是字、双字编程;在 GD32F103 上可以半字编程,且有 bank0、bank1 的划分,对于选项字节的操作也需要按字进行编程。所以您可采用便捷的移植方法,将原工程中的 gd32f10x_fmc.c 和gd32f10x_fmc.h 中 的 代 码替换为GD32E103 固件库中 的 gd32e10x_fmc.c 和gd32e10x_fmc.h 内的代码,替换后需要在把#include "gd32e10x.h"更改为#include"gd32f10x.h"即可,如图 1。GD32E103 固件库可从官网或网盘中获取。
4.3 系统时钟配置
GD32F10x 互联型系列和 E103 系列的时钟配置过程相同,但 E103 上新增了 Flash等待周期,需要在时钟配置前加入相应的 Flash 等待周期,Flash 等待周期和主频对应关系如图 1。
图 2 WSCNT 与 AHB 时钟频率对应关系
在 system_gd32f10x.c 文件中的时钟配置函数里增加 Flash 等待周期的配置,如图 3 所示:
图 3 时钟配置函数中增加 flash 等待周期配置
5. 外设差异性
GD32F10x 与 GD32E103 在外设上大部分兼容的,GD32E103 较 GD32F10x 在很多外设上增加部分功能,用户可根据以下罗列出的外设差异性选择是否使用这些功能。若需升级应用功能使用 E103 上增加的功能,建议将外设库更换为 GD32E103 固件库。
5.1 通用和备用输入/输出接口(GPIO 和 AFIO)
最大 50MHz),当 I/O 端口输出速度大于 50MHz 时,建议使用 I/O 补偿单元对 I/O 端口进行斜率控制,从而降低 I/O 端口噪声对电源的影响。具体功能以及寄存器设置,请用户参考GD32E103 用户手册。
5.2 模数转换器 ADC
为减轻 CPU 的负担,GD32E103 较 GD32F10x 增加了片上硬件过采样单元。它能够处理多个转换,并将多个转换的结果取平均,得出一个 16 位宽的数据。片上硬件过采样单元是以降低数据输出率为代价,换取较高的数据分辨率。具体功能以及寄存器设置,请用户参考 GD32E103 用户手册。
5.3 通用同步异步收发器 USART
GD32E103 较 GD32F10x 在 USART 上增加了块模式(GD32F10x 只支持字节模式)、数据极性设置、数据位反转以及 TX、RX 引脚电平反转、接收超时等功能,因此,GD32E103多了三个寄存器,分别为:USART_CTL3、USART_RT、USART_STAT1。具体功能以及寄存器设置,请用户参考 GD32E103 用户手册。
5.4 内部集成电路总线接口 I²C
GD32E103 和 GD32F10x 的 I²C 都支持标速(最高 100KHz)和快速(最高 400KHz),同时 GD32E103 可支持快速+模式(最高 1MHz),要使能快速+模式,需将 I2C_FMPCFG寄存器的 FMPEN 置 1。具体功能以及寄存器设置,请用户参考 GD32E103 用户手册。
5.5 串行外设接口/片上音频接口 SPI/I²S
GD32E103 和 GD32F10x 的 SPI/I²S 模块差异性主要表现在 GD32E103 支持 SPI TI模式、SPI NSS 脉冲模式和 SPI 四线功能(只有 SPI0),其中 SPI 的四线模式是用于控制四线 SPI Flash 外设,此模式下,数据传输速率是普通模式下的 4 倍。具体功能以及寄存器设置,请用户参考 GD32E103 用户手册。
5.6 外部存储器控制器(EXMC)
GD32E103 的 EXMC 相比 GD32F10x 系列少了NAND Flash/PC Card 控制器。
5.7 通用串行总线全速接口(USBFS)
GD32E103 和 GD32F105/107 的 USBFS 一致,较 GD32F105/107 相比多了 IRC48M的时钟源可选择。具体功能以及寄存器设置,请用户参考 GD32E103 用户手册。
6. 移植注意事项
6.1 软件延时调整
GD32F103 系列 flash 为零等待设计,GD32E103 采用了新的 Flash 设计架构,Flash有等待周期,所以在同主频下效率会略低于 GD32F103。如果用户代码有用到 for 循环或者是 while 循环语句来做延时,延时时间在 GD32E103 系列上会变长,需要适当的减少延时参数或改用 Timer 来做延时函数,使用 GPIO 模拟通信协议的应用需特别注意。
6.2 Flash 编程
GD32E103 Flash 不支持 16 位半字编程,若需对 Flash 进行编程,请采用 32 位全字编程或者双 16 位半字编程,对于连续的大量数据编程也可使用 64 位双字编程提升 Flash编程效率。此外在 flash 擦除和编程时间上 GD32E103 相比 GD32F103 缩短了非常多,如有需要可调整应用。
6.3 启动时间变快
GD32E103 上电启动时间相比 GD32F103 有所提升,如果对上电时序有严格要求可进行调整。
本教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网
全部0条评论
快来发表一下你的评论吧 !