【GD32 MCU 移植教程】8、从 STM32F4xx 系列移植到 GD32F4xx 系列

发布者:TranquilVibes最新更新时间:2024-11-11 来源: elecfans关键字:GD32  MCU  STM32F4xx  系列  移植 手机看文章 扫描二维码
随时随地手机看文章

1.本文简介

GD32F4xx 系列 MCU 是基于 Arm® Cortex®-M4 处理器的 32 位通用微控制器,与 STM32F4xx系列 MCU 保持高度兼容。本文主要从以下三个方面进行介绍:硬件资源对比、外设及性能对比以及从 STM32F4xx 移植到 GD32F4xx 的移植步骤,旨在让开发者能够快速从 STM32F4xx移植到 GD32F4xx,缩短研发周期,加快产品开发进度。


2.GD32F4xx vs STM32F4xx 硬件资源对比

GD32F4xx 和 STM32F4xx 硬件引脚对比如表 2-1. GD32F4xx 和 STM32F4xx pin 对比所示,由该表可知,GD32F4xx 与 STM32F4xx 完全硬件兼容。

表 2-1. GD32F4xx 和 STM32F4xx pin 对比

wKgaombaW6iAWGY6AABJy383CG4620.png?imageView2/2/w/1000

注意:

1. NC 代表可接高、可接地、可不接。

2. STM32F4xx 的 VCAP_1/2 引脚一般是通过阻容接地,若采用 GD32F4xx 替代,建议可直接通过电阻接地,电容可省略。

3. STM32F4xx 的 BYPASS_REG 引脚一般接地或接高,不影响替换。

4. 注意 PDR_ON 引脚需通过 10K 电阻上拉。

3.GD32F4xx vs STM32F4xx 外设及性能对比

GD32F4xx 外设资源丰富,可实现对 STM32F4xx 外设资源的覆盖,具体系统及外设资源对比如表 3-1. GD32F4xx 和 STM32F4xx 系统及外设资源对比所示。

表 3-1. GD32F4xx 和 STM32F4xx 系统及外设资源对比

wKgaombaW4WAHJn_AAAsffPi_c0992.png?imageView2/2/w/1000

4.从 STM32F4xx 到 GD32F4xx 系列移植步骤

GD32F4xx 和 STM32F4xx 均基于 Arm® Cortex®-M4 内核 MCU,可采用相同的集成开发环境和烧录调试工具,一般集成开发环境为 IAR、Keil和Eclipse等,烧录和调试工具可选用ULINK、J-Link、ST-LINK、GD-LINK 等。本节首先介绍使用 Keil 和 IAR 进行集成开发环境选型及工程配置,之后介绍各个外设在移植时可能碰到的问题以及解决方法。

读者进行移植测试时可参考以下步骤进行:

(1)集成开发环境选型及工程配置(或保持之前配置);

(2)将编译的工程代码烧录到芯片内进行测试;

(3)根据使用的外设以及测试的情况参考本节各外设移植问题及解决方法进行修改测试。

4.1 集成开发环境选型及工程配置

4.1.1 使用 Keil5 开发

首先安装选型 pack 包,选型 pack 包可通过 https://pan.baidu.com/s/1mhQsNpu 网盘或GD32MCU.com 官网下载,若采用 Keil5 开发,也可通过 Pack Installer 进行在线更新(建议通过官网下载)。 下 载 后 解 压 pack 包 如 图 4-1. AddOn 选 型 安 装 包 所示,其中

GigaDevice.GD32F4xx_Addon.3.0.0.exe为Keil4的选 型 安 装包 、GigaDevice.GD32F4xx_DFP.3.0.0.pack 为 Keil5 的选型安装包、IAR_GD32F4xx_ADDON.3.0.0.exe 为 IAR 的选型安装包,在此选择 GigaDevice.GD32F4xx_DFP.3.0.0.pack 进行安装,安装路径默认选择 Keil5 安装路径。

wKgZombaW-OAR5MeAAAwb3dp97o696.png?imageView2/2/w/1000

安装选型安装包后,打开具体软件工程,点击 Project->Option for Target 打开配置对话框,点击 Device 进行工程选型,如图 4-2. Keil5 下选型配置所示可选择对应 GD32F4xx 选型,点击OK。

wKgaombaW_KAGysZAACjxyqAjtE600.png?imageView2/2/w/1000

选型后,再次打开 Option for Target 配置对话框,点击 Debug 选择所使用的烧录器,之后点击Utilities->Setting,弹出如图4-3. 下载算法选择窗口对话框,点击add选择对应的下载算法

wKgaombaXAiARB3kAABMp1pCQT4133.png?imageView2/2/w/1000


之后可将修改的工程其他配置与原工程进行对比,排查预定义宏、工程优化、FPU 配置等是否一致,不同的地方可进行修改调整,修改后可进行烧录测试。

4.1.2 使用 IAR 开发

首先安装 IAR 选型包,如图 4-1. AddOn 选型安装包所示,AddOn 选型包中双击IAR_GD32F4xx_ADDON. 3.0.0.exe 选择 IAR 安装路径默认安装即可。

安装选型包后,打开应用工程,打开 option 对话框,选择 general options->Target,可进行设备选型,如图 4-4. IAR 工程选型所示。

wKgZombaXCWADDhTAABzdFrVF4E148.png?imageView2/2/w/1000


选型之后,可以 check 下链接文件以及下载文件是否已更换,如图 4-5. 链接文件选择和图 4-6.下载文件选择所示,选择 GD32 对应链接文件以及下载文件。

图 4-5. 链接文件选择

wKgZombaXDmAa_K4AABTmjHbiGQ029.png?imageView2/2/w/1000

图 4-6. 下载文件选择

wKgaombaXD-ARXBeAABXsMQHqww586.png?imageView2/2/w/1000

配置完成后,即可进行烧录下载及调试测试。

注意:若原始工程选型 GD32 MCU 编译异常,也可以选型 STM32 对应型号进行编译下载测试。若希望调试时对应 GD32 寄存器或者使用 GD32 所有特有的外设或功能可以选择 GD32对应型号,切换选型后有关烧录器选择或其他工程配置需要参考之前的配置进行修改。

4.2 SPI 模块移植注意事项

4.2.1 SPI 重配异常处理

若用户在使用时切换 SPI 配置,重配 SPI 后,SPI 时钟改变,建议在重配 SPI 之前先关闭 SPI模块,配置完成后,再使能 SPI。修改代码如下所示。

wKgaombaXF6AaFIgAAASrqzMy7Y588.png?imageView2/2/w/1000

4.3 ADC 模块移植注意事项

4.3.1 ADC 8 位对齐模式处理

ADC 在设置为 8bit 模式右对齐时,GD32F4xx 是取 12bit 数据中的高 8bit,使用时请注意,如表 4-1. 右对齐时 ADC 采样数据寄存器所示。可采用左对齐,读取高字节数据,如表 4-2. 左对齐时 ADC 采样数据寄存器所示

wKgZombaXH2AKwdzAAAcjsfk40g817.png?imageView2/2/w/1000wKgaombaXIOAcQAyAAAdnOOQdi8716.png?imageView2/2/w/1000

4.3.2 ADC 软件触发时机处理

在 ADC IDLE 的时候,软件写一下 swstart,硬件会检测到 swstart 的上升沿,然后开始采样,并在采样开始的时候将 swstart 清 0。如果在 ADC 正在转换时写 swstart,此时 ADC 无法检测上升沿,当 ADC 转换完当前通道后,swstart 虽为高电平,但检测不到上升沿, ADC 也无法启动转换,因此置位 swstart 之前需要等待 EOC 标志置位,即 ADC 转换完成。

4.3.3 ADC 规则组查询 EOC 读取数据异常处理

ADC 规则组采样数据后先置位 EOC,然后在下个 ADCCLK 将数据填充到数据寄存器,如果ADC 时钟较慢且主频较高情况下,可能存在无法读取 ADC 规则组采样数据的情况,可以通过在 EOC 后延迟超过 1 个 ADCCLK 时间然后再读取 ADC 规则组数据解决。

4.4 USART 模块移植注意事项

4.4.1 串口 DMA 发送数据丢失处理

GD32F4xx MCU 的 USART 使用 DMA 发送,如果先使能 DMA,后使能串口的 Tx 功能,会导致由于 DMA 先于 USART 打开的时间差,造成在 USART 没准备好发送的情况下 DMA 事先传输数据,进而导致数据丢失,软件上可修改 DMA 和串口配置顺序,先配置串口,然后配置DMA。

4.4.2 串口通信由于时钟波特率误差导致数据错乱处理

本项适用于 GD32F405/407/450 系列。在一些存在波特率误差(高低位时间偏差)的应用场景下,比如 485 长距离通信、强干扰等,可能会存在串口 START 位检测异常导致数据错乱的情况,该情况下可通过以下方法进行改善:

1. 将 16 倍过采样配置为 8 倍过采样,注意过采样配置需要在波特率配置之前,可提高对波特率误差的容错能力;

2. 降低波特率;

3. 硬件整改,减少实际波形波特率偏差;

4. 更换 GD32F425/427/470 系列测试。

4.4.3 串口 DMA 接收不定长数据 DMA 无法重配处理

串口 DMA 接收不定长数据一般在串口超时中断或 IDLE 中断中重新配置 DMA,以准备接收下一帧数据,由于关闭 DMA 将会置位 DMA 传输完成标志,进而导致 DMA 无法重新配置,可以通过在关闭 DMA 后清除 DMA 传输完成标志进行解决。

4.5 ENET 模块移植注意事项

4.5.1 以太网 Ping 不通的相关处理

若出现以太网 ping 不通的问题,若排除硬件问题,软件有以下两种可能:

(1)由于 GD32F4xx芯片主频较高,在代码端,应该保证将 ENET_DMA_CTL 寄存器的第 20 位 FTF 置 1,清空发送 FIFO 后,必须软件等待该位被硬件清 0 后适当延迟再进行其他操作。否则,有概率性导致ENET 发送异常,从而出现 PING 不通的情况,修改代码如下所示。

wKgZombaXM-AK-v6AAAWhxNekio085.png?imageView2/2/w/1000

(2)若客户以太网采用半双工通信,若打开载波侦听,会导致发送异常,按照 802.1 以太网协议,需关闭载波监听功能,修改代码如下所示。

wKgZombaXOGALMlyAAAVBOv5BYw689.png?imageView2/2/w/1000

4.5.2 以太网硬件 checksum 异常处理

由于在 GD32F4 上硬件 checksum 使用更严格,可建议使用软件 checksum,或软件上使能ENET_DMA_CTL 里面的 FERF 位,并对错误帧进行相应处理。

4.6 USBFS 模块移植注意事项

4.6.1 USB 发送数据偶尔出错异常处理

若出现 USB 端点发送数据偶尔出错的情况,请排查 DCD_EP_Flush();函数使用情况,该函数仅需在 USB 初始化中端点缓冲区配置完成后,进行 Flush,其他地方 Flush 缓冲区可能会造成USB缓冲区异常,因而建议只需在USB初始化时进行一次缓冲区Flush操作,其他地方的Flush操作可屏蔽。

4.7 IIC 模块移植注意事项

4.7.1 作为主机读取 2 个字节数据 IIC 总线卡死处理

该问题出现的原因是由于在设置 POS 之前被其他中断打断,导致 POS 控制异常,对紧接着的数据回复了 NACK 导致总线挂死,可以有以下两种解决方法:

1、在地址发送之前禁用中断,并在 POS 配置之后使能中断;

2、修改配置流程,将 POS 配置放置在 Start 发送之前。

4.8 HXTAL 时钟移植注意事项

4.8.1 HXTAL 超时等待宏定义配置较短导致溢出处理

在 stm32f4xx.h 中的 HSE_STARTUP_TIMEOUT 超时宏定义建议从 0x0500 改成 0xfffff,修改代码如下所示。

wKgZombaXSyAacvHAAAOMtQoDz4267.png?imageView2/2/w/1000


4.9 CAN 模块移植注意事项

4.9.1 CAN 连续发送概率性丢帧处理

若使用 STM32 Cube 库,在连续发送且不判断上一帧数据发送完成的情况下,可能存在概率性丢帧情况,该问题的原因在于 NUM[1:0]控制位 GD32 和 STM32 的行为不一致,在有 mailbox为空的情况下,STM32 的 Code 位为最小的那个空的 mailbox,而 GD32 的 NUM[1:0]位是正在处理的那个 mailbox。因而建议可通过判断 TME0/1/2 来选择邮箱,具体修改代码如图 4-7. 修改代码示例所示。

wKgZombaXSOAYPfxAAEMx2YjdOM636.png?imageView2/2/w/1000

4.9.2 CAN 无法接收异常处理

若使用 STM32 Cube 库,建议将 CAN 初始化中 SlaveStartFilterBank 由 0 改成 14,否则会出现 CAN0 没有过滤器可用导致无法接收数据,具体修改如图 4-8. 修改代码示例所示。

wKgZombaXV2ADofOAAWmbprwuGM111.png?imageView2/2/w/1000

关键字:GD32  MCU  STM32F4xx  系列  移植 引用地址:【GD32 MCU 移植教程】8、从 STM32F4xx 系列移植到 GD32F4xx 系列

上一篇:【GD32 MCU 移植教程】10、从STM32F030系列移植到GD32E230系列
下一篇:【GD32 MCU 移植教程】9、从 STM32F10x 系列移植到 GD32F30x 系列

推荐阅读最新更新时间:2026-03-22 13:08

GD32 MCU 移植教程】9、从 STM32F10x 系列移植到 GD32F30x 系列
1.本文简介 GD32F30x 系列 MCU 是基于 Arm® Cortex®-M4 处理器的 32 位通用微控制器,与 STM32F10x 系列 MCU 保持高度兼容。本文主要从以下三个方面进行介绍:硬件资源对比、外设及性能对比以及从 STM32F10x 移植到 GD32F30x 的移植步骤,旨在让开发者能够快速从 STM32F10x 移植到 GD32F30x,缩短研发周期,加快产品开发进度。 2.GD32F30x vs STM32F10x 硬件资源对比 GD32F30x 和 STM32F10x 硬件引脚对比如表 2-1. GD32F30x 和 STM32F10xpin 对比所示,由该表可知,GD32F30x 与 STM32
[单片机]
【<font color='red'>GD32</font> <font color='red'>MCU</font> <font color='red'>移植</font>教程】9、从 STM32F10x <font color='red'>系列</font><font color='red'>移植</font>到 GD32F30x <font color='red'>系列</font>
STM32到GD32移植攻略
使用STM32的芯片的朋友,可以很方便的将移植到GD32上面,下面就具体移植过程分享一下: 整个移植过程可以分为硬件和软件两个方面。 硬件方面: 首先要确定先前所使用ST芯片的flash大小和管脚数量,然后替换成GD相同大小Flash和管脚数量的芯片。 简单来说就是STM32F103xxxx替换成GD32F103xxxx。 GD和ST的命名规则相同。 软件方面: 以Keil开发环境为例,打开头文件“stm32f10x.h” 找到定义 #define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) 替换为 #define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF) 重新
[单片机]
μC/OS-Ⅱ在ARM系列单片机S3C44B0x上的移植
目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。 C/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。 COS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植 COS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品的性能,减少产品的
[单片机]
μC/OS-Ⅱ在ARM<font color='red'>系列</font><font color='red'>单片机</font>S3C44B0x上的<font color='red'>移植</font>
μCOS-Ⅱ在ARM系列单片机S3C44B0x上的移植
引 言 目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。 μC/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。μCOS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植μCOS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品的
[单片机]
μCOS-Ⅱ在ARM<font color='red'>系列</font><font color='red'>单片机</font>S3C44B0x上的<font color='red'>移植</font>
在MOTOROLAA68K系列MCU移植μC/OS-II
以下介绍如何将μC/OS-II移植到MOTOROLA MC68K系列CPU上。 一、MC68K CPU简介 MC68K及68020、68040等的著名的MOTOROLA32位微处理器,和与之兼容的68K、CPU32、CPU32+等CPU扩充定时处理单元TPU、队列串行模块QSM、系统控制模块和RAM等组成MC683xx系列单片机。 CPU32内部有8个32位通用数据寄存器,8个32位通用地址寄存器。8个通用数据寄存器可作为累加器使用,也可看成C语言中各种类型的变量;8个通用地址寄存器,可作为变址寄存器使用,也可看成C语言中的指针型变量。CPU32有独立的用户堆栈指针和系统堆栈指针,可区分程序区、数据区、系统区、
[应用]
GigaDevice推出GD32 Colibri系列支持Arduino接口的开发套件
    时间:2014年5月13日 13:31 2014年5月13日 — 日前,业界领先的半导体供应商GigaDevice (兆易创新) 联合第三方合作伙伴Trochili,宣布推出全新的基于GD32系列通用32位ARM Cortex-M3内核微控制器的全套开发板。GD32 Colibri开发板进一步强化了GD32系列微控制器高性能、低成本与易用性的产品优势,以紧凑的8.6cm × 5.4cm的标准外形尺寸为使用GigaDevice GD32系列MCU进行方案评估和原型设计提供了完整的低成本解决方案。 GD32 Colibri开发板由底板和扩展板组成,并支持标准Arduino接口。底板由基本的功能模块组成,具
[手机便携]
STM32、GD32单片机,上电后不运行,复位后才能运行,解决方法
问题描述:仿真器下载程序后,可运行;拔掉仿真器,断电重新上电后,处理器不运行,手动复位后产品能正常运行 出现上面描述的问题,目前我遇到的有两种情况: ①外设设备初始化未完成:可以注释排查外设设备,在初始化的地方添加一段延时,等待产品初始化完成。 ②晶振起振时间长:(上示波器查看晶振起振时间)在时钟初始化启动外部时钟之前添加一段延时等待。 以上是我诸多工程中遇到的情况及解决的方法,如有其他情况 ,欢迎大家不吝赐教。
[单片机]
GD32 MCU 入门教程】七、分散加载说明
分散加载说明以GD32F103ZE为例,分别用Keil、IAR和Embedded Builder工具实现:将函数放置某个地址、将常量放置某个地址、将函数放在RAM中运行的三种效果。 1、将led_toggle()函数放在0x08040000地址后。 2、将tempbuf 常量放在0x08020000地址后。 3、将void led_flow(void) 函数在RAM中运行,放在0x20008000地址后面。 1.Keil IDE example 1.1.将函数放置某个地址 生成.sct 文件 单击 MDK 的 Option - linker 取消勾选“Use memory layout from target Dialog”。 单
[单片机]
【<font color='red'>GD32</font> <font color='red'>MCU</font> 入门教程】七、分散加载说明
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved