GD32F103与STM32F103的区别 2021.6.2

2023-11-13

           GD32F103和STM32F103区别介绍

关键词Key words:
GD32F103、STM32F103
摘要Abstract:
本文主要是GD32F103和STM32F103区别进行介绍。

                              目录
  1. 简介
  2. GD32和STM32的区别
    2.1. 内核
    2.2. 主频
    2.3. 供电
    2.4. FLASH差异
    2.5. 功耗
    2.6. 串口
    2.7. ADC差异
    2.8. FSMC
    2.9. 103系列RAM&FLASH大小差别
    2.10. 抗干扰能力
  3. GD32替换STM32注意事项
    3.1. 硬件注意事项
    3.2. 软件注意事项
  4. 自测记录

1.简介

  • GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的,因此GD32和STM32有很多地方都是一样的,但是GD32和STM32毕竟是不同的产品,不可能将所有东西都沿用STM32的,有些自主开发的东西还是有区别的。相同的地方就不说了,下面我着重介绍一下GD32和STM32不同的地方。

2.GD32和STM32的区别
2.1.内核
GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。
图1 STM32F103勘误表
2.2.主频
使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M;
使用HSI(高速内部时钟):GD32的主频最大108M,STM32的主频最大64M;
主频大意味着单片机代码运行的速度会更快,项目中如果需要进行刷屏,开方运算,电机控制等操作,GD是一个不错的选择。

2.3.供电
外部供电:GD32外部供电范围是2.63.6V,STM32外部供电范围是23.6V。GD的供电范围比STM32相对要窄一点。
内核电压:GD32内核电压是1.2V,STM32内核电压是1.8V。GD的内核电压比STM32的内核电压要低,所以GD的芯片在运行的时候运行功耗更低。

2.4.FLASH差异
GD32的Flash是自主研发的,和STM32的不一样。
GD Flash执行速度:GD32 Flash中程序执行为0等待周期。(?)
STM32 Flash执行速度:ST系统频率不访问flash等待时间关系:当0<SYSCLK<24MHz,0等待周期;当24MHz<SYSCLK≤48MHz,1等待周期;当48MHz<SYSCLK≤72MHz,等2待周期,。
Flash擦除时间:GD擦除的时间要久一点,官方给出的数据是这样的:GD32F103/101系列Flash 128KB 及以下的型号, Page Erase 典型值100ms, 实际测量60ms 左右。对应的ST 产品Page Erase 典型值 20~40ms。

2.5.功耗
相同主频情况下,GD的运行功耗比STM32小,但是在相同的设置下GD的停机模式、待机模式、睡眠模式比STM32还是要高的。
 图2 功耗表

2.6.串口
GD在连续发送数据的时候每两个字节之间会有一个Bit的Idle,而STM32没有,如下图。
 图3 串口数据位状态
GD的串口在发送的时候停止位只有1/2两种停止位模式,STM32有0.5/1/1.5/2四种停止位模式。GD和STM32 USART的这两个差异对通信基本没有影响,只是GD的通信时间会加长一点。

2.7.ADC差异
GD的输入阻抗和采样时间的设置和ST有一定差异,相同配置GD采样的输入阻抗相对来说要小。具体情况见下表这是跑在72M的主频下,ADC的采样时钟为14M的输入阻抗和采样周期的关系:
在这里插入图片描述
2.8.FSMC
STM32只有100Pin以上的大容量(256K及以上)才有FSMC,GD32所有的100Pin或100Pin以上的都有FSMC。

2.9.103系列RAM&FLASH大小差别
GD103系列和ST103系列的ram和flash对比如下图:
在这里插入图片描述
2.10.抗干扰能力
关于这一点,官方没有给出,我在网上查阅资料时,查阅到一个工程师在做项目的时候偶然发现GD的抗干扰能力不如STM32。项目原本是用STM32F103C8T6,后来换成GD F103C8T6,这两个芯片的引脚完全一致,然后单片机用了的两个邻近的引脚作为SPI的时钟引脚和数据输出引脚,然后发现STM32的SPI能正常通讯,GD的不行,经过检查发现PCB板SPI的铜线背面有两根IIC的铜线经过,信号应该是受到影响了。用示波器看了一下引脚的电平,发现确实是,STM32和GD的数据引脚波形都不正常,但是STM32的波形要好很多,波形虽然差了点,但是SPI通讯依然正常。而GD则不能正常通讯了。然后该工程师又把SPI的通讯速率减慢,发现STM32的数据引脚很快就恢复正常波形了,而GD的依然差,直到速率降到很低才恢复正常。初步怀疑是STM32内部对引脚有做一些滤波的电路,而GD则没有。

3.GD32替换STM32注意事项
GD32F103和STM32F103有很多地方是一致,但若想替换,软硬件更改点还是比较多的,下面依次阐述替换中需要注意的点。

3.1.硬件注意事项
1、BOOT0必须接10K下拉或接GND,ST可悬空,这点很重要。
2、RC复位电路必须要有,否则MCU可能不能正常工作,ST的有时候可以不要。
3、有时候发现用仿真器连接不上。因为GD的swd接口驱动能力比ST弱,可以有如下几种方式解决:
a、线尽可能短一些;
b、降低SWD通讯速率;
c、SWDIO接10k上拉,SWCLK接10k下拉。
4、使用电池供电等,注意GD的工作电压,例如跌落到2.0V~2.6V区间,ST还能工作,GD可能无法启动或工作异常。

3.2.软件注意事项
3.2.1.开发环境
目前公司用STM32F103软件开发软件为Eclipse,而GD32的开发软件是keil,代理商给的移植资料和网上可查询也都是基于keil开发软件进行移植的,用eclipse作为开发软件的参考资料尚未查询到。

3.2.2.所有模块的 GPIO 初始化部分。
GD相对于 ST系列最大的改动在 GPIO 部分,主要有以下三点:
1、GPIO 时钟总线配置区别。
之前 ST 系列的 GPIO ABCDF 都挂在了 APB2 总线上,而 GD 的 GPIO 口都挂在了 AHB 总线上,所以在打开 GPIO ABCDF 的时钟的时候就要注意,如下:
比如使能 GPIOA 时钟:
ST 下配置为:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GD 下需改为:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
GPIOB、C、D、F 的时钟使能以此类推。
2、GPIO口复用配置区别。
GD 系列和 ST系列的 IO 口复用配置模式不同。具体对比说明如下:
比如 USART1 的 GPIO 口配置,可以映射到 PA9 和 PA10,也可以映射到 PB6 和 PB7。
(1)ST 配置 USART1 的 GPIO 口,大概过程如下(以 PA9 和 PA10 为例):
(2)首先使能 USART1、GPIOA 和 AFIO 的时钟。
在这里插入图片描述
(3) 然后配置 PA9 和 PA10 的模式。
在这里插入图片描述

(4)最后配置串口相应参数,这部分和 GD完全相同,就不列出来了。
(5)GD 配置 USART1 的 GPIO 口,大概过程如下(以 PA9 和 PA10 为例):
(6)首先使能 USART1、GPIOA 的时钟。
在这里插入图片描述
(7)然后配置 PA9 和 PA10 的模式。
如果将 USART1 映射到 PB6 和 PB7,则复用模式配置如下:
在这里插入图片描述
至于为什么 PA9、PA10 映射到 GPIO_AF_1,PB6 和 PB7 映射到 GPIO_AF_0,需要查看 GD的 datasheet,如下图:
在这里插入图片描述
3、GPIO口模式配置
ST系列的 GPIO 口有 8 种模式,如下图:
在这里插入图片描述
而 GD 系列的 GPIO 口配置在 ST 系列的基础上,按输入输出、推挽开漏、上拉下拉模式分成了三个结构体,相较 ST 系列而言,组合方式更加自由,如下图:
在这里插入图片描述
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GD 系列中,就变成了两条语句:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
又如:ST 系列配置某个 GPIO 口为下拉输入:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ;
GD 系列中,就变成了:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;

3.2.3.外设中断部分
GD 相对于 ST 系列增加了一些模块(如 SYSCFG、TSC、CEC 等),删减了一些模块(如GD只有一个 ADC、最多两路 DMA 等),因此 GD 的中断向量表的名称包括位置相对于 ST系列都有很大改变,很多客户都反映移植中经常遇到的问题就是无法进入中断。

3.2.4.外中断线 EXIT 部分
以配置 PB13 的下降沿中断为例:
ST 的配置如下:
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_EXTILineConfig( GPIO_PortSourceGPIOB, GPIO_PinSource13 );
EXTI_ClearITPendingBit( EXTI_Line13 );
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
GD 的配置如下:
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG_EXTILineConfig( EXTI_PortSourceGPIOB, EXTI_PinSource13);
EXTI_ClearITPendingBit( EXTI_Line13 );
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

3.2.5.DMA模块
GD和 ST 相比,DMA 模块的配置上完全相同,唯一有区别的是外设的 DMA 通道可能略有差别。下面两张图对比了二者 DMA1 映射的区别:
在这里插入图片描述
在这里插入图片描述
DMA 模块的区别反映在软件代码是就是通道配置的区别,例如 USART1 的 Rx 在 ST 系列中在 DMA1 的通道 5,但是在 GD系列中,缺省模式下映射到 DMA1 的通道 3。如果使用USART1 的 DMA 接收方式,相关配置的修改如下:
ST 中:DMA_Init(DMA1_Channel5, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel5, ENABLE);
GD 中:DMA_Init(DMA1_Channel3, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel3, ENABLE);
以上只是常用的模块的软件移植说明,可能还不够全面,需要后续补充。

4.自测记录
1、硬件改动:仅将DIDO板上芯片stm32f103替换成gd32f103,其余外设无改动;
2、开发软件:Eclipse;
3、测试代码:外扩板工装代码;
4、测试外设:Uart、E2prom、Gpio、I2C、watchdag、adc和Can;
5、测试结果:除Can外,其外设可正常使用,但精度和其它细节仍需继续测试。
由于can不可正常使用,为了定位原因,模拟以下工况。
工况1:ST芯片和国产芯片互发数据。
(1)外扩板工装代码相同,can基础配置一致。
(2)测试结果:国产芯片和ST芯片,建立不起通讯关系,但国产芯片的can可以正产发出数据和收到数据,但ST无法接收到国产芯片传过来的数据。
在这里插入图片描述
图 11 国产芯片发送数据波形
在这里插入图片描述
图 12 国产芯片可以接收数据
(3)为了定位通讯不上原因,测试了ST和GD发送数据的波形。
在这里插入图片描述
图 13 国产芯片波特率
在这里插入图片描述
图 14 ST芯片波特率
can在相同配置下,国产芯片波特率为729.9K,ST芯片波特率为1M,定位原因是因国产芯片和ST芯片主频不一致导致波特率不相同,之后尝试了设置国产芯片和ST芯片波特率,让两者一致,但由于主频不一致,设置的波特率仍有差异,不能完全相同,最后仍未建立起通讯。
工况2:国产芯片和国产芯片互发数据。
(1)外扩板工装代码相同,can基础配置一致。
(2)测试结果:国产芯片和国产芯片,建立不起通讯关系,以下为测试波形。
在这里插入图片描述
图 15 国产收数据
在这里插入图片描述

图 16 国产发数据
波特率虽一致,但仍通讯不上,原因未定位。
数据会有错误!!!

在这里插入图片描述
在这里插入图片描述

工况3:控制器和国产芯片互发数据。
版本信息帧:
在这里插入图片描述
数据帧:
在这里插入图片描述
Runtime模式是可以通讯上的:
在这里插入图片描述
工况4:控制器和ST芯片互发数据。
版本信息帧:
在这里插入图片描述
数据帧:
在这里插入图片描述
工况4:bootloader程序下载不进去。
工况5:ST芯片发送版本信息帧。
软件配置版本:V003B000D000
在这里插入图片描述
回传版本:
在这里插入图片描述
硬件配置版本:0001A36X0001V40002
在这里插入图片描述
对比配置版本和已读回的版本:
在这里插入图片描述
工况6:波特率降至500k。
测试结果:不通过

工况7:修改通讯协议,降低发送速度
测试结果:不通过

工况8:在数据压进邮箱后,加了延迟。
在这里插入图片描述
测试结果:可以正常通讯。

工况9:判断邮箱不为空的标志。
在这里插入图片描述
测试结果:可以正常通讯。

测试结论:
GD的使用st的底层库较老,使用ST最新库时需更改can邮箱选择方式!!!

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

GD32F103与STM32F103的区别 2021.6.2 的相关文章

随机推荐

  • html5 first child,childfirst

    在html里 firstchild 有什么作用 表示对第一个字对象的引用 如 DIV的子对象 alert document getElementById abc firstChild tagname 返回SPAN alert documen
  • vcruntime140_1.dll丢失的详细解决办法

    今天准备打开CAD跟ps时候 当打开我自己的ps软件后 弹出了一个对话框 内容是 由于找不到vcruntime140 1 dll 无法继续执行代码 重新安装程序可能会解决此问题 我很纳闷 前几天还好好着呢 于是我上网上查了一下 成功解决了问
  • signature=0e936ad5c99bd8d603e71fa74e787bee,JavaScript 的 BASE64 算法 实现 完美解决中文乱码...

    收藏的Base64编码 解码 在一个外国网站看到的 不过对中文不支持 自己加入了escape 对中文也支持了 先用escape 对中文进行编码 然后再进行base64编码 解码时 再加入 对中文进行解码 p gt W3C DTD HTML
  • URL 链接中 #、?、连接符& 分别有什么作用?

    在一个 URL 中可以包含很多的内容 其中不仅仅是包含 26 个英文字母 10 个罗马数字 中文汉字 还可以拥有井号 问号 连接符 等三种最常见的符号 那么这些符号在网站中都有哪些作用呢 文章目录 一 井号 二 问号 三 连接 一 井号 井
  • Qt:十六进制字符串和十六进制互转

    Qt 十六进制字符串和十六进制互转 前言 一 字符串转换十六进制 1 封装函数 2 函数调用示例 二 16进制转换字符串 前言 网上查了不少方式 踩了不少坑 最终这个方式是我目前使用感觉较好的一种 具体出处已经没印象了 这里放出完整代码供大
  • Spring(二)IOC容器的初始化流程

    文章目录 一 Spring 核心容器类 1 1 BeanFactory 1 2 ApplicationContext 1 3 BeanDefinition 二 IOC容器的初始化 2 1 基于Xml的IOC容器的初始化 2 1 1 寻找入口
  • 15个顶级Java多线程面试题及答案

    1 现在有T1 T2 T3三个线程 你怎样保证T2在T1执行完后执行 T3在T2执行完后执行 这个线程问题通常会在第一轮或电话面试阶段被问到 目的是检测你对 join 方法是否熟悉 这个多线程问题比较简单 可以用join方法实现 2 在Ja
  • LLM在放射科学中应用潜力

    本论文在全球范围内评估了 31 个大型语言模型 LLM 在解读放射科报告并从放射学发现中推导出诊断信息 impression 任务上的表现 这是目前已知的对全球 LLM 用于放射科学自然语言处理 NLP 进行的最全面评估之一 该研究通过在这
  • 8款常见的自动化测试开源框架

    在如今开源的时代 我们就不要再闭门造车了 热烈的拥抱开源吧 本文针对性能测试 Web UI 测试 API 测试 数据库测试 接口测试 单元测试等方面 为大家整理了github或码云上优秀的自动化测试开源项目 希望能给大家带来一点帮助 一 性
  • 运维体系的构建

    文章目录 一 前言 二 基础 2 1 项目摸底 2 2 做一个好辅助 2 3 学习业务 2 4 标准与流程 2 5 维护 三 进阶 3 1 系统 服务优化 3 2 工作流程优化 3 3 规矩 3 4 运维管理平台 一 前言 运维的基础工作通
  • php lazy loading,React丨用户体验丨hook版 lazy loading

    我们都知道随着单页应用 bundle 的体积不断增大 会造成首次加载时间过长 白屏时间过长 过程中会加载了我们首页没有必要看到的一些 页面 组件 js文件 所以我们需要对 bundle 文件进行拆分来进行按需加载 懒加载 这里需要用到 we
  • Xilinx FIFO Generator 需要注意RST复位

    Xilinx FIFO Generator 需要注意RST复位 系列文章推荐 Xilinx FIFO Generator 需要注意RST复位 Xilinx FIFO Generator 需要注意Actual Depth Xilinx FIF
  • cvCloneImage()内存泄漏解决方法, cvCloneImage()和cvCopy()的区别

    转自 http blog csdn net stellar0 article details 8741759 cvCloneImage 每次使用时编译器会分配新的内存空间 不会覆盖以前的内容 所以如果在循环中使用内存会迅速减小 每次用完都需
  • Python 计算机视觉(六)—— OpenCV 进行图像量化与采样

    对于信号的采样可以参考我之前的文章 数字信号处理 2 1 采样 对于信号的量化可以参考 数字信号处理 2 4 ADC 中的有限字长效应 在本篇文章中绘图使用到了 matplotlib 库 需要了解学习可以参考我之前写的用来总结这个绘图库的文
  • 一文看懂Spark中reduceByKey 和 groupByKey 的区别

    目录 一 先看结论 二 举例 画图说明 1 实现的功能分别是什么 1 groupByKey 实现 WordCount 2 reduceByKey 实现 WordCount 2 画图解析两种实现方式的区别 1 groupByKey 实现 Wo
  • C++深拷贝与浅拷贝以及写时复制

    深拷贝和浅拷贝的优缺点 看了深拷贝 浅拷贝优缺点 我们知道浅拷贝效率高 但涉及到指针引用等会涉及到指针的多次释放导致悬挂指针 深拷贝 不会造成指针悬挂的问题 但会浪费空间以及效率较低的问题 下面看下用到浅拷贝的情况 include
  • TCP通信发送和接收数据(Socket、ServerSocket)、TCP通信案例

    目录 TCP TCP发送接收数据 发送数据 Socket 接收数据 ServerSocket TCP通信案例1 TCP接收数据后给出反馈案例2 TCP接收数据后给出反馈案例3 TCP接收数据后给出反馈案例4 TCP 概述 TCP通信协议是一
  • C++实现——三子棋游戏

    题目描述 两个人玩三子棋游戏 即在3 3的矩阵上下棋 一个人画叉一个人画圈 谁先出现成行或成列或成对角线三个相同的棋子就算谁赢 编写算法实现 判断给定棋局的状态 用1代表先手 2代表后手 出现的六种状态为 1won 2won x 代表棋局错
  • 爬虫逆向——某建筑市场监管平台的滑块验证码分析

    目录 网址链接 正文 一 思路分析 二 图片处理 三 完整代码 网址链接 aHR0cHM6Ly9nY3htLmh1bmFuanMuZ292LmNuL2RhdGFzZXJ2aWNlLmh0bWw bs64解密可见 正文 注 分步的代码为示例代
  • GD32F103与STM32F103的区别 2021.6.2

    GD32F103和STM32F103区别介绍 关键词Key words GD32F103 STM32F103 摘要Abstract 本文主要是GD32F103和STM32F103区别进行介绍 目录 简介 GD32和STM32的区别 2 1