GD32F103与STM32F103的区别 2021.6.2
GD32F103和STM32F103区别介绍
关键词Key words:
GD32F103、STM32F103
摘要Abstract:
本文主要是GD32F103和STM32F103区别进行介绍。
目录
- 简介
- 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. 抗干扰能力 - GD32替换STM32注意事项
3.1. 硬件注意事项
3.2. 软件注意事项 - 自测记录
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相关推荐
- 在GD32F103移植STM32F103代码
在GD32F103移植STM32F103代码 使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序.虽然两个款芯片的寄存器地址以及架构基本相同.但是需要注 ...
- 【贪玩巴斯】带你学: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 ...
- GD32F103替代STM32F103带来串口不能用的问题
近期,由于需要,先前使用GD32F103的替换STM32F103的芯片,它的系统主频提升到104MHZ, 众所周之,STM32F103的主频是72MHZ,这里没有什么问题,只要改一下SYSTEMCLO ...
- lol哪个服务器有无限乱斗,英雄联盟无限乱斗和无限火力有什么区别 2021无限乱斗开放时间表[多图]...
英雄联盟11.3版本更新后来了一个无限乱斗模式,跟我们期待已久的无限火力名字不一样?哪么这两个模式是同一个模式吗?这两个模式有什么区别呢?现在就为大家详细的解答一下. 英雄联盟无限火力是什么模式: 在 ...
- dsp广告和信息流广告区别_信息流广告和sem广告有哪些区别2021?
信息流广告和SEM广告实质上都是通过竞价的方式进行的,最终由竞价来确定显示.尽管两者之间的差距正在缩小,但仍有许多分歧.信息流广告与SEM广告的主要区别有以下几点: 1. 不同的用户需求 信息流推广是 ...
- 深圳大学计算机专硕和学硕的区别,2021深大考研:学硕专硕的区别
往年说法,专硕比学硕好考:①专硕大部分是考数学二和英语二,难度上比学硕稍低;②前几年专硕学费高奖学金少,导致报考人数少竞争小.但是从17年开始似乎并不完全是这样,慢慢报考专硕的人数已经超过了学硕,导致 ...
- cpu水冷散热器和风冷散热器哪个好 cpu水冷散热器和风冷散热器的区别2021
散热的模式不同: (1)水冷的要用水塔经过水循环来散热,它是没有金属散热器. 组装电脑怎么搭配电脑更好用这些点很重要看过你就懂了 http://www.adiannao.cn/du (2)风冷是要风扇 ...
- 关于最近GD32F103替代STM32F103方案个人记录
由于最近STM32芯片价格猛涨,公司要求寻找替代方案.考虑到开发时间最终选择了pin-pin兼容的GD32. 在STM32原有工程基础上不做大发动,只要细微修改下面图示一个地方便可以实现替代. 一.使 ...
- 计算机考研的初试和复试的区别,2021考研初试和复试的区别
一.考试时间不同 考研初试是每年年底12月下旬左右,考研复试是考研初试之后第二年的4月份左右. 一般来说,考研初试是每年的10月份开始报名,11月份现场确认考研资格,12月份正式考试.考研初试结束后的 ...
- 计算机二级ms用wps,【计算机二级MS office与WPS office考试内容的区别】- 环球网校...
[摘要]2021年下半年全国计算机二级考试再有两个多月就要开考了,只有明确考什么,小伙伴们的复习备考才能更有方向,为了帮助大家复习备考,环球网校小编分享了"计算机二级MS office与WP ...
最新文章
- 仿BlogEngine.NET的cnBlog主题
- sdut2772 KMP的简单应用
- 微软邮件系统Exchange 2013系列(二)先决条件
- SpringMvc的服务器端跳转和客户端跳转
- PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版
- 【渝粤教育】国家开放大学2018年春季 3897T商务英语1 参考试题
- 【渝粤教育】21秋期末考试财务管理10164k2
- python空格怎么加密_使用Python的RSA加密
- 使用.NET Remoting开发分布式应用——基于租约的生存期(转载)
- 分享按钮 Social Buttons for Bootstrap
- vs安装 c语言编译环境,Visual Studio Code安装与C/C++开发调试环境搭建
- Windows 环境安装 RabbitMQ
- 7-模块开发卷宗(GB8567——88)
- (转)Mahout Kmeans Clustering 学习
- 【硬盘故障】硬盘只显示盘符,不显示容量,无法打开的解决方案
- c语言使用反三角函数,C语言中反三角函数怎样调用?
- Handsontable使用教程 含授权码LicenseKey
- Android 在一个APP里打开另一个APP
- vba 读取图片尺寸
- cocos2d-x 添加自定义字体---中文,英文
热门文章
- ZDNS宣布完成B轮融资,根服务器之外,顶级域名系统迎重要机遇
- 令牌环(Token Ring)
- java md5加密解密类_Java实现MD5加密解密类
- 网页API分析之淘宝抢购秒杀原理(订单数据获取简单分析)
- 利用matlab来进行路径规划,matlab路径规划系列
- 电工学的MATLAB实践,基于Matlab/Simulink的电工学电路仿真
- python打造最强表白程序,Python 打造七夕最强表白程序
- 教师计算机知识培训内容,新学期教师计算机培训方案
- 阿里云服务器 发送邮件无法连接smtp的解决方案
- 台式计算机的质保期是多少,戴尔台式机保修多长时间