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

news2024/9/23 13:27:37

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 及以上版本 MDKGD32E50x 插件。

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++研发笔记1——github注册文档

1、第一步:登录网站 GitHub: Let’s build from here GitHub 最新跳转页面如下: 2、选择“sign up”进行注册,并填写设置账户信息 3、创建账户成功之后需要进行再次登录 4、根据实际情况填写个人状态信息 登录完成后页面网站: 5…

大规模预训练语言模型的参数高效微调

人工智能咨询培训老师叶梓 转载标明出处 大规模预训练语言模型(PLMs)在特定下游任务上的微调和存储成本极高,这限制了它们在实际应用中的可行性。为了解决这一问题,来自清华大学和北京人工智能研究院的研究团队探索了一种优化模型…

[MRCTF2020]pyFlag(详解附送多个python脚本)

Hex: FF D9 5B 53 65 63 72 65 74 20 46 69 6C 65 20 50 61 72 74 20 31 3A 5D ASCII: [Secret File Part 1:] 发现Setsuna.jpg尾部有多余的一部分有左侧窗口pk头&a…

手把手教你GPT-SoVITS V2版本模型教程,内附整合包

首先需要声明的一点就是V1的模型能用在V2上面,但是V2的模型不能用在V1上,并且V1模型在V2上效果不佳! 整合包下载地址: GPT-SoVITS V2整合包下载 https://klrvc.com/ GPT-SoVITS V2模型下载网 这次V2更新了以下功能 UVR5&#x…

超声波清洗机哪些品牌好用?小型超声波清洗机推荐

在日常生活中,诸如眼镜、项链和耳环之类的常用小物件,频繁的接触使得它们表面易吸附尘埃,尤其是缝隙里的污垢往往难以手动清除。此时,超声波清洗机成为了理想的清洁助手,它能深入细微之处,带来彻底的清洁体…

【设计模式-策略】

定义 策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法的变化不会影响到使用算法的客户。通过使用策略模式,算法可以在运行时根据需要动态地进行更换,从…

JAVA毕业设计164—基于Java+Springboot+vue3的汽车租赁管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的汽车租赁管理系统(源代码数据库)164 一、系统介绍 本项目前后端分离(可以改为ssm版本),分为用户、会员、管理员三种角色 1、用户&#xff1a…

破防了!软考小白们的春天,低起点也能赢在起跑线

软考通过率是否真的很低,可以通过官方数据来了解。 一、软考通过率是多少? 首先要说明的是,软考办并没有公布全国考试的通过率。但根据官方公布的报名人数和合格人数可以做一个预估。 浙江软考办官方公布,浙江2022年下半年软考…

c#透明悬浮球实现 从零开始用C#写一个桌面应用程序(三)

目标:透明悬浮球 记录日期:20240308 要求基础:C#语言基础部分事件与委托,c#桌面程序基础操作 注:可见前文 http://t.csdnimg.cn/9uWK8 今天开始做一个悬浮球软件。本以为最难的是让悬浮球的具体功能&#xff0c…

养猫知识!猫罐头好还是猫粮好?宠物医生都在用的猫罐头

有位姐妹刚养猫大概已经快一年了,一直给猫喂的都是干粮,猫咪毛发枯燥,长肉慢。带到医院检查后,我发现猫咪营养不良,吸收能力差,有点软便,我建议她给猫咪喂主食罐。结果猫咪爱吃,而且…

openGuass——对象管理

目录 一、表空间 二、数据库 三、模式:Schema 四、database schema table之间的关系 五、表 六、分区表 七、索引 八、视图 九、序列 十、同义词 十一、约束 一、表空间 自带了两个表空间:pg_default和pg_global。查看命令:\db 默认表空间pg…

AI时代,什么是QPS数据?

自 OpenAI 公司于 2022 年 11 月 30 日发布 ChatGPT 以来,经过 23 年一整年的发展之后,大语言模型的概念已逐渐普及,出现了各种基于大语言模型的周边产品,可以说已经玩的相当花哨了。 在这个AI发展的过程中,不少本地化…

Unity之OpenXR如何使用Netcode实现一个多人VR游戏

前言 Netcode for GameObjects 是专为 Unity 构建的高级网络库,可用于抽象网络逻辑。您可以通过网络会话同时向许多玩家发送 GameObjects 和世界数据。借助 Netcode for GameObjects,您可以专注于构建游戏,而无需考虑低级协议和网络框架。 Netcode框架的核心特性包括: 易…

支付宝开放平台-开发者社区——AI 日报「8 月 27 日」

1 多模态 Al 王者登场,语言图像模型大一统!Meta 发布 Transfusion模型 新智元丨阅读原文 Meta 最新发布的 Transfusion 模型,成功融合了 Transformer 和 Diffusion 技术,实现了文本和图像生成的统一。该模型通过结合语言建模和扩…

动态内存管理函数malloc,calloc,realloc,free

malloc 函数原型:void* malloc(size_t size); 这个函数向内存申请一块连续可用的size大小的空间,并返回指向这快空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此ma…

应用程序编程接口 (API) — 简单解释

Nimrita Koul 博士 https://medium.com/nimritakoul01/application-programming-interface-api-simply-explained-3680d4649121 文章目录 一、说明二、API 的类型二、示例健身应用程序三、可乐自动售货机四、客户端和服务器五、超文本传输协议 (HTTP)5.1…

逆向中的游戏-入土为安的第二十五天

逆向中的游戏 CE的介绍 Cheat Engine ,简称CE,是逆向工程师常用的几大神器之一,也是游戏汉化、破解以及外挂编写中常用的工具,其功能包括:内存扫描、十六进制编辑器、调试工具,可以进行反汇编调试、断点跟…

FaceChain 打造个人证件照 职业照 写真照

一、简介 FaceChain可实现兼具可控性与ID保持能力的无限风格写真与固定模板写真功能,同时对ControlNet和LoRA具有优秀的兼容能力。FaceChain支持在gradio的界面中使用模型训练和推理能力、支持资深开发者使用python脚本进行训练推理,也支持在sd webui中安…

【精选】基于springboot休闲娱乐代理售票系统(源码+定制+开发辅导)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

进销存专业化管理系统,降低采购和销售成本 带完整的安装代码包以及搭建部署教程

系统概述 在当今竞争激烈的市场环境中,企业的运营效率与成本控制直接关联到其生存与发展。特别是对于中小企业而言,如何高效地管理进销存流程,减少不必要的开支,成为了提升竞争力的关键。为此,我们精心打造了一款“进…