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。

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.6.串口
GD在连续发送数据的时候每两个字节之间会有一个Bit的Idle,而STM32没有,如下图。

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邮箱选择方式!!!

GD32F103与STM32F103的区别 2021.6.2相关推荐

  1. 在GD32F103移植STM32F103代码

    在GD32F103移植STM32F103代码 使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序.虽然两个款芯片的寄存器地址以及架构基本相同.但是需要注 ...

  2. 【贪玩巴斯】带你学:C++ tips ——知识点: C++整型short,int,long和long long的区别 2021年12月20日

    [贪玩巴斯]带你学:C++ tips --知识点: C++整型short,int,long和long long的区别 2021年12月20日 C++的整型有short,int,long和long lo ...

  3. GD32F103替代STM32F103带来串口不能用的问题

    近期,由于需要,先前使用GD32F103的替换STM32F103的芯片,它的系统主频提升到104MHZ, 众所周之,STM32F103的主频是72MHZ,这里没有什么问题,只要改一下SYSTEMCLO ...

  4. lol哪个服务器有无限乱斗,英雄联盟无限乱斗和无限火力有什么区别 2021无限乱斗开放时间表[多图]...

    英雄联盟11.3版本更新后来了一个无限乱斗模式,跟我们期待已久的无限火力名字不一样?哪么这两个模式是同一个模式吗?这两个模式有什么区别呢?现在就为大家详细的解答一下. 英雄联盟无限火力是什么模式: 在 ...

  5. dsp广告和信息流广告区别_信息流广告和sem广告有哪些区别2021?

    信息流广告和SEM广告实质上都是通过竞价的方式进行的,最终由竞价来确定显示.尽管两者之间的差距正在缩小,但仍有许多分歧.信息流广告与SEM广告的主要区别有以下几点: 1. 不同的用户需求 信息流推广是 ...

  6. 深圳大学计算机专硕和学硕的区别,2021深大考研:学硕专硕的区别

    往年说法,专硕比学硕好考:①专硕大部分是考数学二和英语二,难度上比学硕稍低;②前几年专硕学费高奖学金少,导致报考人数少竞争小.但是从17年开始似乎并不完全是这样,慢慢报考专硕的人数已经超过了学硕,导致 ...

  7. cpu水冷散热器和风冷散热器哪个好 cpu水冷散热器和风冷散热器的区别2021

    散热的模式不同: (1)水冷的要用水塔经过水循环来散热,它是没有金属散热器. 组装电脑怎么搭配电脑更好用这些点很重要看过你就懂了 http://www.adiannao.cn/du (2)风冷是要风扇 ...

  8. 关于最近GD32F103替代STM32F103方案个人记录

    由于最近STM32芯片价格猛涨,公司要求寻找替代方案.考虑到开发时间最终选择了pin-pin兼容的GD32. 在STM32原有工程基础上不做大发动,只要细微修改下面图示一个地方便可以实现替代. 一.使 ...

  9. 计算机考研的初试和复试的区别,2021考研初试和复试的区别

    一.考试时间不同 考研初试是每年年底12月下旬左右,考研复试是考研初试之后第二年的4月份左右. 一般来说,考研初试是每年的10月份开始报名,11月份现场确认考研资格,12月份正式考试.考研初试结束后的 ...

  10. 计算机二级ms用wps,【计算机二级MS office与WPS office考试内容的区别】- 环球网校...

    [摘要]2021年下半年全国计算机二级考试再有两个多月就要开考了,只有明确考什么,小伙伴们的复习备考才能更有方向,为了帮助大家复习备考,环球网校小编分享了"计算机二级MS office与WP ...

最新文章

  1. 仿BlogEngine.NET的cnBlog主题
  2. sdut2772 KMP的简单应用
  3. 微软邮件系统Exchange 2013系列(二)先决条件
  4. SpringMvc的服务器端跳转和客户端跳转
  5. PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版
  6. 【渝粤教育】国家开放大学2018年春季 3897T商务英语1 参考试题
  7. 【渝粤教育】21秋期末考试财务管理10164k2
  8. python空格怎么加密_使用Python的RSA加密
  9. 使用.NET Remoting开发分布式应用——基于租约的生存期(转载)
  10. 分享按钮 Social Buttons for Bootstrap
  11. vs安装 c语言编译环境,Visual Studio Code安装与C/C++开发调试环境搭建
  12. Windows 环境安装 RabbitMQ
  13. 7-模块开发卷宗(GB8567——88)
  14. (转)Mahout Kmeans Clustering 学习
  15. 【硬盘故障】硬盘只显示盘符,不显示容量,无法打开的解决方案
  16. c语言使用反三角函数,C语言中反三角函数怎样调用?
  17. Handsontable使用教程 含授权码LicenseKey
  18. Android 在一个APP里打开另一个APP
  19. vba 读取图片尺寸
  20. cocos2d-x 添加自定义字体---中文,英文

热门文章

  1. ZDNS宣布完成B轮融资,根服务器之外,顶级域名系统迎重要机遇
  2. 令牌环(Token Ring)
  3. java md5加密解密类_Java实现MD5加密解密类
  4. 网页API分析之淘宝抢购秒杀原理(订单数据获取简单分析)
  5. 利用matlab来进行路径规划,matlab路径规划系列
  6. 电工学的MATLAB实践,基于Matlab/Simulink的电工学电路仿真
  7. python打造最强表白程序,Python 打造七夕最强表白程序
  8. 教师计算机知识培训内容,新学期教师计算机培训方案
  9. 阿里云服务器 发送邮件无法连接smtp的解决方案
  10. 台式计算机的质保期是多少,戴尔台式机保修多长时间