GD32替代STM32全过程记录

2023-11-03

文章目录
【看完就懂】GD32替代STM32全过程记录
一、前言
二、GD32与STM32
什么是GD32
GD32F10x/F30x和STM32F10x资源对比
GD32F10x/F30x与STM32F10x软硬件设计对比
三、程序下载方法
J-Link下载
FlyMcu下载
四、使用CubeMX开发GD32测试
【看完就懂】GD32替代STM32全过程记录
读完这一篇文章,你能获得的知识点:

 GD32与STM32基本区别
 STM32CubeMX程序修改后如何下载到GD32
 GD32移植后一些外设的测试
一、前言
最近半导体行业出现的缺货浪潮,各种芯片价格飙升,像一些常用芯片如STM32F103C8T6,从去年的5块一片涨价到现在的65一片,涨幅17倍!!!在这种情况下,大家纷纷在找一些国产芯片来替代ST的芯片,而在国产中做的比较好的芯片就是兆易创新的GD32芯片了,我最近也本着学习的心态研究了一下GD32快速替换STM32的方式,使用GD32F303VCT6替换STM32F103VCT6,以此为例做一些记录分享给大家

二、GD32与STM32
什么是GD32
GD32是由北京兆易创新开发的国产32位MCU,基于Arm Cortex- M3/M23/M4内核以及RISC-V内核的32位通用微控制器,与STM32相比,CPU主频更高,内存更多,外设更丰富。其众多产品是以STM32芯片为模板,基于STM32的底层寄存器地址进行正向研发,部分产品可以直接PIN TO PIN替代STM32的芯片,部分型号可以直接以STM32的程序做部分修改后直接烧入进GD32中运行,例如GD32E103、GD32F10x、GD32F30x都是和STM32F10x系列是完全PIN TO PIN兼容的,内部地址寄存器完全兼容,唯一区别只是内核不同,但在使用外设时影响不会很大,下面的文章我也围绕GD32替代STM32F10x系列的芯片展开叙述

GD32F10x/F30x和STM32F10x资源对比
选项    GD32F10x系列特性    GD32F30x系列特性    STM32F10x系列特性
CPU及Flash特性    高达108MHz主频 高达3M Flash 前256K Flash零等待    高达120MHz主频 高达3M Flash 前256K Flash零等待    72M主频,512KFlash
片内外设特性    高达3个12位ADC; 高达2个12位DAC; 高达10个通用16位定时器,2个基本定时器和2个增强型定时器; 高达3个SPI、2个I2C、5个USART/UART、2个I2S、2个CAN、1个全速USBD、1个全速USBFS、1个以太网MAC    高达3个12位ADC; 高达2个12位DAC; 高达10个通用16位定时器,2个基本定时器和2个增强型定时器; 高达3个SPI、2个I2C、5个USART/UART、2个I2S、2个CAN、1个全速USBD、1个全速USBFS、1个以太网MAC    3个ADC,2个DAC,4个通用TIM,2个高级TIM,2个基本TIM,3个SPI,2个I2C,5个USART,1个USB,1个CAN,1个SDIO
其他特性    36~144 PIN;具有SDIO模块;    36~144 PIN 具有SDIO模块;    36~144 PIN 具有SDIO模块;
GD32F10x/F30x与STM32F10x软硬件设计对比
相同点

芯片的型号命名方式相同,而且相同信号的引脚定义基本相同,具体命名规范如下


函数库文件基本相同:因为GD32正向研发,对于PIN TO PIN的芯片,内部寄存器地址和STM32完全相同,所以STM32的库文件编译后的文件可以直接下载

编译工具相同如keil、IAR都相同

不同点

工作电压有所不同,STM32的工作电压在2.0~ 3.6V或1.65~ 3.6V,GD32的工作电压在 2.6~3.6V,工作范围相对要窄。

GD32F303/F103主频比STM32F103主频要高,适合一些更快的计算中

GD32提高了相同工作频率下的代码执行速度,所以GD32的_NOP()时间比STM32更加短,所以不使用定时器做延时时要注意修改

GD32的flash擦除时间要比STM32更长

功耗上GD32的功耗要相对高一点

GD32的BOOT0必须接10K下拉或接GND,ST可悬空,这点很重要。

RC复位电路必须要有,否则MCU可能不能正常工作,ST的有时候可以不要。

GD的swd接口驱动能力比ST弱,可以有如下几种方式解决:
a、线尽可能短一些;
b、降低SWD通讯速率;
c、SWDIO接10k上拉,SWCLK接10k下拉。

GD对时序要求严格,配置外设需要先打开时钟,在进行外设配置,否则可能导致外设无法配置成功;ST的可以先配置在开时钟。

修改外部晶振起振超时时间,不用外部晶振可跳过这步。
原因:GD与ST的启动时间存在差异,为了让GD MCU更准确复位(不修改可能无法复位)。

三、程序下载方法
在使用GD的标准库开发时,可以使用J-Link、DAP在编译器内可以进行下载程序和在线仿真

在使用STM32的库进行开发时,因为芯片不对应,无法进行仿真,但在程序验证之后可以直接移植到对于芯片PIN TO PIN的GD芯片之中,具体下载方式有通过J-LinkFlash或者GD-Link下载hex,或者跳过FlyMCU经过USB转TTL和串口1连接下载程序,还有一种跳过DFU下载这个我没有尝试过,下面我就具体讲一下J-Link下载和FlyMCU串口下载到GD32 (该下载方法对ST和GD都有效)

J-Link下载
准备条件:

首先我们有一个STM32F103VCT6的点灯工程hex,通过CubeMX配置,具体教程看我之前的文章:点灯链接,这里因为要移植到GD32,需要修改工程里面的HSE超时时间,具体位置在生成代码的如下位置,把值改大就行,不改大会影响复位正常运行!!!改完生成新的hex文件


JFlashARM.exe软件


J-Link连接电脑与GD32F303


操作步骤:

打开软件,点击设置,进入工程设置


设置下载模式,这里我用的SWD下载


设置下载的目标对象-STM32F103VCT6


设置Auto下载时的操作


设置完成回到主界面,点击open打开hex文件


点击连接,连接jlink和芯片


点击auto进行下载程序


下载后可能出现ERROR: Could not start CPU core. (ErrorCode: -1)报错,但是不影响,只要出现下面框选的内容就代表程序下载完成,出现报错可能的原因是因为我使用的M3内核程序下载到M4内核单片机,软件复位启动后会报错,但实际上已经自动复位完成了,如果不想出现报错,把auto里面最好一个选项取消勾选,就不会有报错了,但这样需要自己硬件复位程序。还有一个注意点,每次hex重新生成后需要重新再打开一次hex文件,可能是JFlash版本问题。


FlyMcu下载
准备条件:

USB转TTL模块连接GD32单片机


FlyMcu下载软件


一个STM32F103VCT6的点灯工程hex和上面的相同
操作步骤:

将USB转TTL与单片机串口1连接,同时保证两边共地,及USB转TTL的TX接PA10,RX接PA9,GND与GND连接VCC可接可不接,但如果接了电压要接到相同的,不要接错,接完将USB转TTL插到电脑上
打开FlyMcu,选择串口连接,波特率设置为115200,过高不稳定,过低下载慢,根据自己需求来


选择打开hex文件


选择STMISP,同时配置模式为不使用RTS和DTR,因为我的USB转TTL是直接连接到单片机串口1的,其他的模式需要配合一些电路设计,具体可以百度


将单片机的Boot0拉高Boot1拉低,原因(参考百度):这样设置启动方式为系统存储器启动方式,从系统存储器启动,该模式的启动程序功能是由厂家设置的。一般来说,这样的启动方式用的比较少。系统存储器是芯片内部一块特定的区域,GD32在出厂时,由GD在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法改动。一般来说,我们选用这样的启动模式时,是为了从串口下载程序,由于在厂家提供的BootLoader中,提供了串口下载程序的固件,能够通过这个BootLoader将程序下载到系统的Flash中。该下载方式须要下面步骤:

将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才干从系统存储器启动BootLoader

最后在BootLoader的帮助下,通过串口下载程序到Flash中

6.在FlyMcu中点击下载,之后按下开发板复位按键,程序显示下载,下载完成如下

将boot0插回低电平,复位芯片运行程序
GD32直接下载STM32 Hal库开发的程序运行完成

四、使用CubeMX开发GD32测试
这一栏是我用STM32CubeMX进行开发,并下载到GD32F303VCT6的芯片上运行,观察移植效果的一些记录,测试会一直更新,并且将我遇到的反馈效果记录下来,给后面同学做参考

HAL库开发测试GPIO输出,1S灯的电平反转一次
测试效果:完美运行,示波器看了电平变化间隔,精度挺高

HAL库开发测试串口1输出数据,1S发送一次信息
测试效果:时间戳观察,符合预期现象,下次使用逻辑分析仪看一下具体波形和STM32做对比!


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GD32替代STM32全过程记录 的相关文章

  • vue项目引入外部图标

    前言 在查找怎么引入外部图标的时候 发现对于一些细节他们的文章描述的并不清楚 本次以VantUi项目为例教大家如何引入外部图标 只要是vue项目 不同的框架引入外部图标是一样的 vantui原生内部引用 在正式引入之前 我觉得还是有必要说一
  • 分布式微服务架构下网络通信的底层实现原理

    在分布式架构中 网络通信是底层基础 没有网络 也就没有所谓的分布式架构 只有通过网络才能使得一大片机器互相协作 共同完成一件事情 同样 在大规模的系统架构中 应用吞吐量上不去 网络存在通信延迟 我们首先考虑的都是网络问题 因此网络的重要性不

随机推荐

  • 搭建djangorestframework-(DRF)环境

    今天执行drf实验的时候 碰到一下错误 记录一下 系统环境 Windows 10 64 话不多说 上图 执行数据库迁移的时候 如下报错 解决办法是找到下面文件 将decode改为encode就可以了 执行数据库迁移碰到下面错误 python
  • 大疆没有边界:刚拳打GoPro,又脚踢优必选

    李根 发自 纽凹非寺 量子位 报道 公众号 QbitAI 干一行 干好一行 而且刚一出手就卓尔不凡 配得上这样标准的公司全球都不多 但DJI大疆创新肯定位列名单 刚刚推出的教育机器人产品 也在印证上述判断 挺进教育领域 6月12日 大疆发布
  • 百度2011.10.16校园招聘会笔试题

    百度2011 10 16校园招聘会笔试题 一 算法设计 1 设rand s t 返回 s t 之间的随机小数 利用该函数在一个半径为R的圆内找随机n个点 并给出时间复杂度分析 解 通过求得点的坐标的方法 代码如下 void GetNPoin
  • python逻辑控制

    usr bin python encoding utf8 while循环 Fibonacci series 斐波纳契数列 两个元素的总和确定了下一个数 a b 0 1 while b lt 10 print b a b b a b if判断
  • 全字母句(字符串) SDUT

    全字母句 Time Limit 1000 ms Memory Limit 65536 KiB Problem Description 全字母句 pangram 指包含字母表中全部 26 种英文字母 不区分大小写 的句子 其常被用于展示英文字
  • 该怎么学习区块链技术?

    1 入圈之前 出来学习的第一步是出来 在区块链的世界里面 链上的数据都是资产 所以骗子多 入圈的第一步当然是要保护好自己 建议在正式入圈前 先完整的阅读这个文档 这是安全大牛余弦出品 必属精品 看完这个文档之后 对于常见的概念以及对 Met
  • compilation error错误是什么原因_Java专题讲解——Java错误处理机制

    世界上并不存在不会出错的系统 只要是软件系统就一定会在运行的过程中出现开发人员无法预料的错误 如何处理意外发生就是我们作为一名开发人员所必须深入思考的问题 Java语言提供了完善的异常处理机制 它有效的降低了编写以及维护的门槛 这也是Jav
  • 多数据源dynamic.datasource,SpringBoot+MybatisPlus+PostgreSQL连接数据库

    所需依赖
  • 软件从一个计算机系统转换到另一个,MatrikonOPC常见问答:如何将MatrikonOPC软件许可证从一台计算机转移到另一台计算机?...

    MatrikonOPC常见问答 如何将MatrikonOPC软件许可证从一台计算机转移到另一台计算机 如题 如何将MatrikonOPC软件许可证从一台计算机转移到另一台计算机 许可程序 解决方案 解除许可程序 授权实用程序 我们的大多数软
  • python中anaconda怎么样_python中anaconda有什么用

    python中anaconda有什么用 发布时间 2020 11 16 10 05 49 来源 亿速云 阅读 61 作者 小新 了解python中anaconda有什么用 这个问题可能是我们日常学习或工作经常见到的 希望通过这个问题能让你收
  • 36小时极客嘉年华

    FISCO BCOS是完全开源的联盟区块链底层技术平台 由金融区块链合作联盟 深圳 简称金链盟 成立开源工作组通力打造 开源工作组成员包括博彦科技 华为 深证通 神州数码 四方精创 腾讯 微众银行 亦笔科技和越秀金科等金链盟成员机构 代码仓
  • python之__init__()、__call__()、__str__()、__del()__和__all__,以及pytorch的nn.Module的forward函数在实例化的时候不需要被调用。

    python基础语言之 init call str del 和 all 的用法及讲解 以及为什么pytorch的nn Module的forward函数在实例化的时候不需要被调用 下面的所有内容都来自于这些链接 1 python基础语言之 i
  • 网校搭建7:上架第一门课

    主页设置完了 网校没课程怎么行呢 现在就来添加第一门课 Step1 添加分类 在MeEdu的框架下 每一个课程都是属于一个分类 比如我有六门数学课 分别对应一年级到六年级 但是都属于是数学 那么分类就是数学 路径 视频 分类 添加保存即可
  • 剑指Offer第四十五题:扑克牌顺子

    题目描述 LL今天心情特别好 因为他去买了一副扑克牌 发现里面居然有2个大王 2个小王 一副牌原本是54张 他随机从中抽出了5张牌 想测测自己的手气 看看能不能抽到顺子 如果抽到的话 他决定去买体育彩票 嘿嘿 红心A 黑桃3 小王 大王 方
  • Docker 部署 Seata Server(使用nacos 做为注册中心和配置中心)

    组件版本关系 版本说明 每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本 经过验证 自行搭配各组件版本不保证可用 如下表所示 最新版本用 标记 docker 拉取 seata镜像 seata github地
  • Where is the xm Command in XenServer

    For those of you have used vanilla Xen will know about the xm command and what it does While I ve found in a few places
  • 小黑升级记----记ThinkPad470p加装固态盘

    目录 一 缘起 二 拆机 三 配件选择 四 安装 五 系统迁移 六 总结 一 缘起 本着做开发来用的目的 两年前买了ThinkPad T系列的470P 之所以选择ThinkPad 是因为之前R系列的本 用了接近10年 除了USB插口老化 里
  • vue中多个表单同时校验

    vue中多个表单同时校验 开发过程中 有时候会遇到需要对多个表单进行校验 需要利用Promise的特性进行解决 使用Promise进行一个队列校验 表单校验 submitForm refName string return new Prom
  • Vcenter 6.7添加主机报错解决方法

    出现故障环境为 Vcenter 6 7 40000 Esxi 6 7 update3 14320388 在添加新ESXI主机时进度条在80 报错 出现了常规系统错误 Unable to push CA certificates and CR
  • GD32替代STM32全过程记录

    文章目录 看完就懂 GD32替代STM32全过程记录 一 前言 二 GD32与STM32 什么是GD32 GD32F10x F30x和STM32F10x资源对比 GD32F10x F30x与STM32F10x软硬件设计对比 三 程序下载方法