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

描述

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 对比

STM32

注意:

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 系统及外设资源对比

STM32

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 安装路径。

STM32

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

STM32

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

STM32

 

之后可将修改的工程其他配置与原工程进行对比,排查预定义宏、工程优化、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 工程选型所示。

STM32

 

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

图 4-5. 链接文件选择

STM32

图 4-6. 下载文件选择

STM32

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

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

4.2 SPI 模块移植注意事项

4.2.1 SPI 重配异常处理

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

STM32

4.3 ADC 模块移植注意事项

4.3.1 ADC 8 位对齐模式处理

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

STM32STM32

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 不通的情况,修改代码如下所示。

STM32

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

STM32

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,修改代码如下所示。

STM32

 

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. 修改代码示例所示。

STM32

4.9.2 CAN 无法接收异常处理

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

STM32

教程GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网

 

 

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分