一文解析STM32、GD32、ESP32差异

发布者:BlissfulHeart最新更新时间:2024-08-22 来源: elecfans关键字:STM32  GD32  ESP32 手机看文章 扫描二维码
随时随地手机看文章

前言 

STM32:意法半导体在 2007 年 6 月 11 日发布的产品,32位单片机。


GD32:兆易创新 2013 年发布的产品,在芯片开发、配置、命名上基本模仿 STM32,甚至 GPIO 和 STM32 都是 pin to pin 的,封装不改焊上去直接用。有时候 STM32 的源码不修改,重新编译烧写到 GD32 上就可以跑。当然也有很多不同,比如串口驱动、USB 、库文件等。

ESP32:乐鑫公司 2017 年开发的产品,和 STM32、GD32 不同,ESP32 主要面向物联网领域,支持功能很多,但引出 GPIO pin 脚很少,因此大多数 GPIO 都有很多复用功能。出厂就集成蓝牙、WiFi 等物联网必备功能,板子也很小,适合物联网。

GD32 和 STM32 的区别

GD32 是国产单片机,据说开发人员来自ST公司,GD32 也是以 STM32 作为模板做出来的。所以 GD32 和 STM32 有很多地方都是一样的,不过 GD32 毕竟是不同的产品,不可能所有东西都沿用 STM32,有些自主开发的东西还是有区别的。不同的地方如下:

1、内核

GD32 采用二代的 M3 内核,STM32 主要采用一代 M3 内核,下图是 ARM 公司的 M3 内核勘误表,GD 使用的内核只有 752419 这一个 BUG。

31c4f960-0f02-11ed-ba43-dac502259ad0.png

2、主频

使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M

使用HSI(高速内部时钟):GD32的主频最大108M,STM32的主频最大64M

主频大意味着单片机代码运行的速度会更快,项目中如果需要进行刷屏,开方运算,电机控制等操作,GD 是一个不错的选择。

3、供电

外部供电:GD32 外部供电范围是 2.6~3.6V,STM32 外部供电范围是2.0~ 3.6V或1.65~ 3.6V。GD 的供电范围比 STM32 相对要窄一点。

内核电压:GD32 内核电压是 1.2V,STM32 内核电压是 1.8V。GD 的内核电压比 STM32 的内核电压要低,所以 GD 的芯片在运行的时候运行功耗更低。

4、Flash差异

GD32 的 Flash 是自主研发的,和 STM32 的不一样。

GD Flash 执行速度:GD32 Flash 中程序执行为 0 等待周期。

STM32 Flash 执行速度:ST 系统频率不访问 flash 等待时间关系:0 等待周期,当 0Flash 擦除时间:GD 擦除的时间要久一点,官方给出的数据是这样的:GD32F103/101 系列 Flash 128KB 及以下的型号, Page Erase 典型值 100ms, 实际测量 60ms 左右。对应的 ST 产品 Page Erase 典型值 20~40ms。

5、功耗

从下面的表可以看出 GD 的产品在相同主频情况下,GD 的运行功耗比 STM32小,但是在相同的设置下 GD 的停机模式、待机模式、睡眠模式比 STM32 还是要高的。

31d94a6e-0f02-11ed-ba43-dac502259ad0.png

6、串口

GD 在连续发送数据的时候每两个字节之间会有一个 Bit 的 Idle,而 STM32 没有,如下图:

31ea36c6-0f02-11ed-ba43-dac502259ad0.png

GD 的串口在发送的时候停止位只有 1/2 两种停止位模式。STM32 有 0.5/1/1.5/2 四种停止位模式。

GD 和 STM32 USART 的这两个差异对通信基本没有影响,只是 GD 的通信时间会加长一点。

7、ADC 差异

GD 的输入阻抗和采样时间的设置和 ST 有一定差异,相同配置 GD 采样的输入阻抗相对来说要小。具体情况见下表这是跑在 72M 的主频下,ADC 的采样时钟为 14M 的输入阻抗和采样周期的关系:

31f497a6-0f02-11ed-ba43-dac502259ad0.png

8、FSMC

STM32 只有 100Pin 以上的大容量(256K及以上)才有 FSMC,GD32 所有的 100Pin 或 100Pin 以上的都有 FSMC。

9、103 系列 RAM&FLASH 大小差别

GD103 系列和 ST103 系列的 ram 和 flash 对比如下图:

32059a1a-0f02-11ed-ba43-dac502259ad0.png

10、105&107系列STM32和GD的差别

GD的105/107的选择比ST的多很多,具体见下表:

321471de-0f02-11ed-ba43-dac502259ad0.png

11、抗干扰能力

GD 的抗干扰能力不如 STM32,还需要一定打磨。

ESP32 和 STM32

ESP32 是乐鑫公司推出的一款采用两个哈佛结构 Xtensa LX6 CPU 构成的拥有双核系统的芯片。所有的片上存储器、片外存储器以及外设都分布在两个 CPU 的数据总线和/或指令总线上。

相比于 STM32 的一个大家族,ESP32 虽然也代表一个系列,但目前来说,这个系列的成员还是比较少的,我们看下:

322748c2-0f02-11ed-ba43-dac502259ad0.png

资源如下:

323638d2-0f02-11ed-ba43-dac502259ad0.png324b082a-0f02-11ed-ba43-dac502259ad0.png3254ef3e-0f02-11ed-ba43-dac502259ad0.png

功能框图如下:

326e7828-0f02-11ed-ba43-dac502259ad0.png

模块(非芯片)的引脚分布如下:

32777234-0f02-11ed-ba43-dac502259ad0.png

ESP32 这个模块的 IO 并不多,估计也就 30 个左右(芯片有34个,但是模块中外接 FLASH 用掉了一些)。但是你会发现它有几个特点:

1、集成了非常多的外设接口,SPI、IIC、IIS、AD、DA、PWM、IR、UART、CAN等等。IO 数量有限,所以基本上每个 IO 都有多个功能。

2、片内flash和ram很大,flash有448KB,ram有520KB。而模块上直接挂了一个4MB的flash。

3、速度快!虽然外接晶体的频率只有40MHZ,但通过内部主频可以支持80MHZ、160MHZ、240MHZ,运算能力高达600MIPS。

4、有wifi和蓝牙!当前两者不能同时使用。

STM32 和 ESP32 基本是有各自不同的定位。ESP32 偏向体积小巧、速度超快、功能强大,通过 wifi 接入网络,专门为物联网而生;而 STM32 偏向管脚丰富、功能全面,虽然没有 wifi 和蓝牙,速度也没有 ESP32 快,但是可以通过网口接入网络,可以控制更多的外设,为消费电子和工业控制而生。


总结

STM32 和 GD32 是同质化产品,区别一个是国外,一个是国产,最近流行国产化替代,所以 GD32 还是很有发展前景的。


关键字:STM32  GD32  ESP32 引用地址:一文解析STM32、GD32、ESP32差异

上一篇:STM32ADC中断的使用注意事项和优化建议
下一篇:浅谈STM32CubeMX使用方法及功能介绍

推荐阅读最新更新时间:2024-11-17 09:59

STM32端口模式配置
1、上拉输入:上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同,没有什么严格区分。 2、下拉输入:就是把电压拉低,拉到GND。与上拉原理相似。 3、浮空输入:浮空(floating)就是逻辑器件的输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。 通俗讲就是让管脚什么都不接,浮空着。 4、模拟输入:模拟输入是指传统方式的输入。数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的
[单片机]
<font color='red'>STM32</font>端口模式配置
STM32串口使用详解
一、关于串口需要了解的几个知识点: 1.波特率:在串行通讯中,数据是按位进行传送的,因此传送速率用每秒钟传送格式位的数目来表示,称为波特率。 波特率决定了串口传输的速度,1波特=1bps(位/秒)。波特率为9600的话就是1s传输9600位的数据。 串口的传输与网络等其他的传输有着相似之处,比如常用的wifi,区别在与这些网络的单位是k,只有串口是按位来计数的。 2.单工,半双工,全双工: 单工:只能一个方向传输 半双工:可以两个方向传输,但需要分时复用 全双工:两个方向传输 二、初始化函数 串口的初始化包括以下几部分: 1.时钟初始化: RCC_APB2PeriphClockCmd(RCC_APB2Per
[单片机]
STM32 定时器输出比较非主动模式
STM32的定时器可以工作在输出比较非主动模式TIM_OCMode_Inactive,这个模式下,当定时器的计数值达到比较值时就会强制将引脚电平拉低。但是由于定时器通道对应的引脚配置成GPIO_Mode_AF_PP时,它默认的电平时低电平,如果这时候工作在输出比较非主动模式,即时强制拉低,这样的话引脚一直是低电平,完全没有现象。由于水平所限,我也不知道该如何使用定时器输出比较非主动模式才能体现它的 非主动 这个特性。我下面要讲的例子虽然用的是定时器输出比较非主动模式来输出PWM波,但是完全体现不出这个特格特点来。还请见谅! 下面就讲讲定时器在输出比较非主动模式下如何生成PWM波的。还是基于我自己的规范工程! 1、工程的修改 1
[单片机]
<font color='red'>STM32</font> 定时器输出比较非主动模式
STM32单片机学习笔记(4):24C02(模拟IIC)
项目简介 利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第四部分针对EEPROM 24C02的一个实例,IIC通信是一种比较典型的串行通信方式,在很多情况下都会有所使用,了解并熟悉IIC通信就显得十分重要。本项目之所以使用模拟IIC,而没有使用STM32单片机内置的硬件IIC,主要由于Half库里IIC的坑太多了,自己一开始也是想通过HAL库来开发,但是始终不成功,也有可能仿真软件也有些坑,如果有能够做出来的大佬,也欢迎评论区或私聊我交流,不过在实物32单片机开发板上网上好像验证过可用,但是手上暂时缺开发板,
[单片机]
<font color='red'>STM32</font>单片机学习笔记(4):24C02(模拟IIC)
一步步写STM32 OS【二】环境搭建
一、安装IAR for ARM6.5 二、新建工程 1、选择处理器:STM32F407VG,暂不使用FPU 2、必要的路径配置和宏定义 3、使用SWO重定向IO输出 4、使用ST-LINK仿真器 5、下载配置 6、设置CPU频率,防止SWO输出乱码 三、代码调试
[单片机]
一步步写<font color='red'>STM32</font> OS【二】环境搭建
STM32基础知识4-va_list原理及用法
VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。 下面是va_list的用法示例 : #include stdarg.h int AveInt(int,...); void main() { printf( %d/t ,AveInt(2,2,3)); printf( %d/t ,AveInt(4,2,4,6,8)); return; } int AveInt(int v,...) { int ReturnValue=0;
[单片机]
stm32专题六:中断 NVIC
stm32的中断分为 1.抢占优先级。 2.子优先级。 1.抢占优先级。抢占优先级高的中断,可以打断抢占优先级低的中断。 2.子优先级。抢占优先级相同的中断,子优先级高的可以优先执行。 其实,子优先级主要给出了一种响应的优先队列。假设中断的抢占优先级都相同。如果有多个相同抢占优先级的中断来了 ,那么他们不会互相打断,但是他们后续的排队会按照子优先级排队。也就是说,在第一个中断没有执行完的期间内,后续的最高级的子优先级是被安排到最高等待位处理的。 NVIC设置流程: 定义NVIC初始化结构体; 配置优先级分组; 往NVIC初始化结构体中填充,如中断源,抢占优先级,子优先级,使能等; 调用NVIC初始化函数; 编写
[单片机]
<font color='red'>stm32</font>专题六:中断 NVIC
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved