本文主要是介绍ChibiOS系列:一、从0到STM32,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文翻译自:http://www.playembedded.org/blog/from-0-to-stm32/
从0到STM32
发表于 2017年7月17日 更新了 2018年6月19日
物联网的基石
如今,我们被能够做出令人难以置信的事物的智能物体所包围。这些被称为智能物品的物体现在能够通过不同的有线和无线通信通道进行通信。显而易见的结果是,这些对象能够通过互联网获取和推送数据:这种现象,即智能物联网,通常被称为物联网 或物联网。
物联网的普及主要是由于两个主要原因:
- 微控制器的发展,在价格下降的同时提高了性能;
- 开源的扩散,今天我们完全免费提供高质量的编译器,调试器和嵌入式库。
什么是微控制器?
微控制器单元或(MCU)是集成在单个小芯片中的完整计算机系统。
流行的串口通讯RS232电缆。
这个定义会让没有经验的用户感到困惑,他们想象一台计算机就像连接到屏幕,鼠标和键盘的大金属机箱。实际上,计算机的基本概念是 连接到一个或多个存储器的处理器或CPU的集合,其也可以通过通信总线连接到不同的I / O外围设备。
MCU完全符合这一概念,但其外围设备与键盘,VGA显示器,鼠标等完全不同。相反,它们是简单的I / O端口,定时器,模数转换器或标准通信外设,如通用异步接收器发送器或UART,它是用于实现着名RS232 的外设(见图1)。
所有这些(以及更多)都嵌入在一个芯片中,这就是专业人士将MCU称为 嵌入式系统的原因。
CPU和MCU之间的区别
在过去几年中,半导体行业发展如此之快,以至于今天我们拥有广泛的电子设备和许多变体。因此,定义明确的计算设备组是不容易的。例如,在开始时,处理单元通常是彼此互连的芯片集合:整个芯片和互连集合通常表示为中央处理单元(CPU)。随着技术的发展,他们开始创造小型CPU,其特点是全部集成在一个小芯片中,因此它们被称为微处理器单元(MPU)。
如今,很难区分MPU和CPU:我们模糊地称它们为CPU或微处理器或应用程序核心。无论如何,我们可以断言MCU(微控制器)和CPU(应用程序核心)之间仍然存在很大差异。
第一个区别在于两个单元背后的概念:
- 应用程序核心(CPU)是一种用于计算大量操作(通常很复杂)的芯片,但它不是嵌入式存储器(小型高速缓存除外),也不是总线和外设。
- 微控制器(MCU)是一种设计为独立设备的芯片,即使与应用核心相比性能下降,也易于集成在小型设备中。它通常嵌入一个或多个RAM存储器,一个或多个闪存和一系列外设,如定时器,通信专用外设,转换器等。
从这个角度来看,我们可以断言:
MCU的内部连接到易失性存储器(RAM),非易失性存储器(NVM),通常是闪存和一些外设。
第二个区别与之前的陈述有关:因为它们是为不同目的而设计的,所以表现完全不同。
- CPU通常具有Giga-Hertz数量级的时钟频率,接口连接到千兆字节的外部RAM和数百千兆字节的外部SSD或HDD。在某些情况下,它还集成了GPU(图形处理单元)或专用计算单元。有时它集成了RAM控制器,但没有别的。SATA,以太网等控制器通常位于芯片外部。
- 相反,MCU具有几十或几百兆赫的时钟频率,嵌入很少达到100 kB的RAM和很少达到1 MB的NVM。它嵌入了外围设备和接口,在高端MCU的情况下,通常还集成了以太网控制器。
MCU在计算能力或RAM /存储能力方面通常不具有极高的性能。另一方面,CPU具有更大的功耗并且难以封装在小尺寸的PCB中。
ARM Cortex架构
从0到STM32
发表于 2017年7月17日 更新了 2018年6月19日
物联网的基石
如今,我们被能够做出令人难以置信的事物的智能物体所包围。这些被称为智能物品的物体现在能够通过不同的有线和无线通信通道进行通信。显而易见的结果是,这些对象能够通过互联网获取和推送数据:这种现象,即智能物联网,通常被称为物联网 或物联网。
物联网的普及主要是由于两个主要原因:
- 微控制器的发展,在价格下降的同时提高了性能;
- 开源的扩散,今天我们完全免费提供高质量的编译器,调试器和嵌入式库。
什么是微控制器?
微控制器单元或(MCU)是集成在单个小芯片中的完整计算机系统。
流行的串口通讯RS232电缆。
这个定义会让没有经验的用户感到困惑,他们想象一台计算机就像连接到屏幕,鼠标和键盘的大金属机箱。实际上,计算机的基本概念是 连接到一个或多个存储器的处理器或CPU的集合,其也可以通过通信总线连接到不同的I / O外围设备。
MCU完全符合这一概念,但其外围设备与键盘,VGA显示器,鼠标等完全不同。相反,它们是简单的I / O端口,定时器,模数转换器或标准通信外设,如通用异步接收器发送器或UART,它是用于实现着名RS232 的外设(见图1)。
所有这些(以及更多)都嵌入在一个芯片中,这就是专业人士将MCU称为 嵌入式系统的原因。
CPU和MCU之间的区别
在过去几年中,半导体行业发展如此之快,以至于今天我们拥有广泛的电子设备和许多变体。因此,定义明确的计算设备组是不容易的。例如,在开始时,处理单元通常是彼此互连的芯片集合:整个芯片和互连集合通常表示为中央处理单元(CPU)。随着技术的发展,他们开始创造小型CPU,其特点是全部集成在一个小芯片中,因此它们被称为微处理器单元(MPU)。
如今,很难区分MPU和CPU:我们模糊地称它们为CPU或微处理器或应用程序核心。无论如何,我们可以断言MCU(微控制器)和CPU(应用程序核心)之间仍然存在很大差异。
第一个区别在于两个单元背后的概念:
- 应用程序核心(CPU)是一种用于计算大量操作(通常很复杂)的芯片,但它不是嵌入式存储器(小型高速缓存除外),也不是总线和外设。
- 微控制器(MCU)是一种设计为独立设备的芯片,即使与应用核心相比性能下降,也易于集成在小型设备中。它通常嵌入一个或多个RAM存储器,一个或多个闪存和一系列外设,如定时器,通信专用外设,转换器等。
从这个角度来看,我们可以断言:
MCU的内部连接到易失性存储器(RAM),非易失性存储器(NVM),通常是闪存和一些外设。
第二个区别与之前的陈述有关:因为它们是为不同目的而设计的,所以表现完全不同。
- CPU通常具有Giga-Hertz数量级的时钟频率,接口连接到千兆字节的外部RAM和数百千兆字节的外部SSD或HDD。在某些情况下,它还集成了GPU(图形处理单元)或专用计算单元。有时它集成了RAM控制器,但没有别的。SATA,以太网等控制器通常位于芯片外部。
- 相反,MCU具有几十或几百兆赫的时钟频率,嵌入很少达到100 kB的RAM和很少达到1 MB的NVM。它嵌入了外围设备和接口,在高端MCU的情况下,通常还集成了以太网控制器。
MCU在计算能力或RAM /存储能力方面通常不具有极高的性能。另一方面,CPU具有更大的功耗并且难以封装在小尺寸的PCB中。
ARM Cortex架构
臂?
如果这不是您第一次阅读嵌入式系统,那么您肯定听说过ARM或ARM Cortex。关于这一点经常会有一些混乱,所以我们将花费很少的话来解决这个问题。
最初代表Acorn RISC Machine的ARM是精简指令集计算机(RISC)机器的架构名称。体系结构是“描述计算机系统的功能,组织和实现的一组规则和方法”,而计算机芯片是体系结构的物理实现。Acorn RISC机器也是如此:计算机的架构。ARM本身在设计和功耗方面非常有趣,这个想法背后的人们开始实现更多的架构,而ARM成为了一个品牌。
如今,ARM设计的架构主要用于我们日常使用的大部分产品中。
ARM本身不生产芯片。它设计销售许可证以使用其知识产权的架构。许多半导体公司购买此许可证以生产自己的芯片。
STMicroelectronics的STM32是一个基于ARM架构的芯片的例子,但是由ST的半导体公司生产。ST不是唯一一个这样的人:高通,Apple,德州仪器,Microchip,英飞凌和许多其他公司都使用ARM架构。
皮质:M,A和R.
ARM主要有三种有趣的架构,它们是常用的并且众所周知:
- ARM Cortex-M
- ARM Cortex-A
- ARM Cortex-R
Cortex-M的
该架构旨在拥有体积最小,功耗最低的Cortex处理器。这种处理器针对确定性和实时嵌入式处理进行了优化:因此,在这种情况下,M代表微控制器。
我们谈论的是32位MCU,时钟频率范围为24-400兆赫兹,嵌入式闪存高达几兆字节,嵌入式系统高达数百千字节。Cortex-M是一系列架构的名称,包括M0,M0 +,M3,M4,M7,现在还包括M23和M33。
ARM Cortex-M架构适用于所有需要处理硬件并面向低功耗的应用。
的Cortex-A
该架构旨在达到最高性能水平。这种处理器针对应用进行了优化:因此,在这种情况下,A代表应用程序。
我们谈论的是64/32位应用核心,时钟频率为千兆赫兹,它没有嵌入闪存或RAM。Cortex-A是一系列架构的名称,包括A5,A7,A32,A35,A8,A9,A53,A55,A15,A17,A57,A72,A73和A75。
Cortex-A系列处理器已经开发用于运行一些架构扩展,如TrustZone,big.LITTLE和浮点架构。
的Cortex-R
该架构专为硬实时应用而设计。这种处理器为嵌入式系统提供高性能计算解决方案,其中需要可靠性,高可用性,容错性和/或确定性实时响应:在这种情况下,实时R链
通常,Cortex-R是一个MCU,其中两个内核执行相同的代码,外部单元逐步检查两个芯片之间的一致性。此模式称为Lockstep。
Cortex-R是一系列架构的名称,包括R4,R5,R7,R7和R52。
介绍STM32
STM32F042x4 / x6的内部图。
STM32是意法半导体的一系列基于ARM Cortex-M的32位微控制器。STM32分为子系列,每个子系列都基于特定的Cortex-M架构,并拥有自己的一组外设。随着数百种不同的MCU,STM32系列不断扩展,但问题是:为什么这么多不同的MCU呢?
答案很简单:每个MCU在闪存和RAM存储器,时钟频率,引脚号和芯片封装方面都有不同的尺寸。更重要的是,每个芯片具有不同的外围设备和不同的数量。该策略提供了选择非常接近用户需求的MCU的机会。
亚科
STM32 MCU的名称由字母和数字组成 ,形式为STM32 XNMMOO,而X是字母,NMM是三个数字,OO是两个字母。例如,我们有STM32 F303VC,STM32 L476ZG,STM3 2F401RE,STM32 F407VG等。亚家族由X和N识别,因此在我们的例子中,亚家族是F3,L4,F4和(再次)F4。
可以做的第一个大的区别是与X字母有关。目前我们有三条线:F线,L线和H线。
- 在F-线 是第一个系列STM32微控制器的。目前它分为6 个子系列STM32F0,STM32F1,STM32F2,STM32F3,STM32F4和STM32F7。
- 的L-线是低功率系列STM32的MCU。目前它分为三个子系列STM32L0,STM32L1 和STM32L4。
- 该H-线 已经被新引入的,是一个非常高的表演系列32位MCU。目前它仅包括STM32H7亚家族。
每个STM32都提供大量外设,所有外设都提供完整的可配置时钟树,内置PLL,多通道DMA,定时器,串行线调试,ADC,USART,SPI,I2C和RTC。每个微控制器之间的区别在于这些外设的数量和特性。例如,面向低功耗的STM32L4具有特殊的低功耗定时器以及具有低功耗的多速内部PLL的MSI。相反,STM32F3有一个特殊的定时器,它提供多达六个通道及其否定:这种定时器面向全桥控制。此外,STM32F373配备了16位ADC Sigma Delta,而STM32通常提供12位ADC。
另一个区别是特定外设的数量,例如某些STM32具有更多的独立定时器或USART。因此,选择合适的STM32肯定取决于应用程序。
当然,每个子系列在时钟速度,RAM和闪存大小方面也提供不同的性能。每个子系列通常都有一些特定的外围设备,使其独一无二。下表是对子族之间主要差异的非详尽总结。
STM32Fx系列
F-line在性能和外设方面提供广泛的解决方案。
亚家族 | 建筑 | 电压(V) | FCPU(MHz) | Flash(字节) | RAM(kB) | 特殊外围设备 |
STM32F0 | ARM Cortex-M0 | 1.8 / 2.0到3.6 | 48 | 16k到256k | 4到32岁 | 12位DAC,CAN,CEC,无晶体USB,触摸感应 |
---|---|---|---|---|---|---|
STM32F1 | ARM Cortex-M3 | 2.0至3.6 | 24至72岁 | 16k到1M | 4到96 | USB 2.0 FS / OTG,CAN 2.0B,FSCM,3相定时器,SDIO,以太网,HDMI CEC,I2S |
STM32F2 | ARM Cortex-M3 | 1.7至3.6 | 120 | 128k到1M | 高达128 | 加密,2×12位DAC,以太网,摄像头,FSMC |
STM32F3 | ARM Cortex-M4 | 1.8 / 2.0到3.6 | 72 | 32k到512k | 16至80岁 | SPFPU,16位ADC,12位DAC,比较器,运算放大器,高级TIM,高分频定时器 |
STM32F4 | ARM Cortex-M4 | 1.7至3.6 | 84到180 | 64k到1.5M | 32至384 | SPFPU,以太网,CAN,摄像头,双四SPI,SPDIF,SAI,Chrom-ART,TFT LCD控制器,MIPI DSI |
STM32F7 | ARM Cortex-M7 | 1.7至3.6 | 216 | 256k到2M | 256到512 | DP / SPFPU,L1缓存,JPEG编解码器,CAN,DFSDM,TFT LCD,MIPI DSI |
STM32Lx系列
L-line更加注重低功耗:每个STM32Lx都具有动态电压调节功能,特殊的低功耗时钟源,高级RTC。
亚家族 | 建筑 | 电压(V) | FCPU(MHz) | Flash(字节) | RAM(kB) | 特殊外围设备 |
STM32L0 | ARM Cortex-M0 + | 1.65至3.6 | 32 | 高达64k | 8 | AES 128位,LP UART,LP定时器,12位DAC,触摸感应,TRNG,无晶体USB段式LCD驱动器 |
---|---|---|---|---|---|---|
STM32L1 | ARM Cortex-M3 | 1.65至3.6 | 32 | 32k到512k | 4到80岁 | 12位DAC,运算放大器,比较器,电容式触摸,段式LCD驱动器,AES 128位 |
STM32L4 | ARM Cortex-M4 | 1.7至3.6 | 80 | 128k到1M | 64至320 | SAI,SAI,Chrom-ART,AES 128/256位,段式LCD驱动器,USB 2.0 OTG FS,12位DAC,电容式触摸 |
这些MCU可以在不同模式下工作,这会影响电流消耗。
STM32L0的当前消耗参考值为:
- 动态运行模式:低至87μA/ MHz
- 超低功耗模式+全RAM +低功耗定时器:440 nA(16条唤醒线)
- 超低功耗模式+备份寄存器:250 nA(3个唤醒引脚)
- 唤醒时间:3.5μs
STM32L1的当前消耗参考值为:
- 超低功耗模式:280 nA,带备用寄存器(3个唤醒引脚)
- 超低功耗模式+ RTC:900 nA,带备用寄存器(3个唤醒引脚)
- 低功耗运行模式:低至9μA
- 动态运行模式:低至177μA/ MHz
STM32L4的当前消耗参考值为:
- 超低功耗模式:8 nA,备用寄存器,无实时时钟(5个唤醒引脚)
- 超低功耗模式+ RTC:200 nA,带备用寄存器(5个唤醒引脚)
- 超低功耗模式+ 16 KB RAM:200 nA
- 超低功耗模式+ 16 KB RAM + RTC:450 nA
- 动态运行模式:低至36μA/ MHz
- 唤醒时间:5μs
STM32Hx系列
该子系列是新一代高性能微控制器系列。据了解,该子系列是ARM Cortex-M7 MCU,时钟频率高达400MHz。所有STM32H均配备USB 2.0 OTG FS / HS,SDMMC,USART,SPI,I2C,HDMI-CEC,比较器,运算放大器,I2S,SAI,12位DAC,SPDIF-RX,LCD TFT控制器,Chrom- ART,加密选项,TRNG,DFSDM,16/32位定时器和最高2 Msps的14位ADC。
亚家族 | 建筑 | 电压(V) | FCPU(MHz) | Flash(字节) | RAM(字节) | 空间外围设备 |
STM32H7 | ARM Cortex-M7 | 1.7至3.6 | 400 | 2M双银行 | 1M | 双精度FPU,双Quad-SPI,以太网,摄像头 |
---|
个人笔记,比较,误解
看看前面的表格,我们应该清楚地知道时钟频率,RAM和闪存大小的范围。在我的嵌入式世界之旅中,我经常听说STM32和Arduino或Arduino和Raspberry之间的比较等等。本段旨在回答一些常见问题,并指出误解。
STM32还是Arduino哪个更好?
这个问题没有任何意义。这个问题听起来像“Intel i7或HP Compaq,哪个更好?”STM32是一个微控制器,Arduino是一系列开源开发板,而且,Arduino STAR Otto配备了STM32F469。
尝试解码这个非常常见的问题,通常处理Arduino的人使用Arduino Uno或Arduino Mega,因为很容易找到准备使用这些开发板的库。Arduino UNO搭载了一款ATmega328P,它是Microchip(之前的Atmel)的8位AVR MCU,时钟速度高达20 MHz,闪存为32kB,RAM为2kB。那么,就性能而言,当然最好选择提供更高MIPS(每秒百万条指令)的STM32 ,更大的外设和VLSI芯片组。另一方面,没有任何电子知识的初学者通常更喜欢使用易于使用的Arduino,这要归功于黑盒子范例:Arduino API通常倾向于向用户隐藏问题以换取缺乏性能和/或多功能性。
我个人认为,这是帮助业余爱好者 或年轻人接近嵌入式系统的好方法,但对于应该解决和解决问题的工程师或专业人员来说,这不是一个好的解决方案。
必须要做的另一个考虑因素是表演不是最重要的事情。在某些应用中,小型微控制器足以完成您必须做的事情:在这些情况下,我们应该考虑开发产品所需的时间或MCU本身的价格,甚至是整个系统的功耗。例如,如果应用程序是一个小型传感器节点,每天必须获取一次环境信息并且由小型电池供电,则必须考虑低功耗MCU。
STM32还是Raspberry Pi?
同样,这个问题没有任何意义。STM32是一个微控制器,Raspberry Pi是一系列应用开发板。更多的Raspberry Pi主板有不同的目标:应用程序!Raspberry Pi 3配备了Broadcom BCM2837,这是一款四核1.2GHz 64位ARM Cortex-A53。将Cortex-A与Cortex-M进行比较以及将8位与32位微控制器进行比较是不寻常的。
Cortex-A通常运行Linux或其他复杂的操作系统,不是特别针对实时应用程序,而是通常用于驱动LCD并执行图形或数据过滤所需的大量操作。Cortex-M通常运行RTOS(实时操作系统),面向硬件并创建实时解决方案。
总结选择取决于最终的应用。请注意,我们经常提到“实时”一词:我们将在下面的教程中指出这意味着什么。
有很多基于ARM Cortex-M的MCU:为什么选择STM32?
我在2013年开始使用微控制器,而不是你常说的极客。我从STM32F3开始,经过一些初步的困难,几个月后我就可以在日常应用中使用它了。一年后,我非常热衷于这个新工具,我开始制作关于这个论点的视频和教程。但我是一个好奇的家伙,所以我开始探索其他选择:我有机会使用Arduino Uno,Arduino Mega,Arduino Due,Freescale MK20和MK64,Infineon XMC1100,Texas TIVA C TM4123G,STMicroelectronics SPC560D,几乎每个STM32(除了STM32H7,但是时间问题)和一些其他非MCU可编程器件。
好吧,我必须说(我个人的意见),STM32的文档是我见过的最准确的。我也喜欢STM32提供的内部外围设备:有趣的是外围设备通常不会在整个子系列中发生变化,并且某些子系列具有相同类型的外设。为了更好地解释这个,让我举个例子:SPI有两个版本。STM32F1,STM32F2,STM32F4,STM32L0和STM32L1的第一个版本STM32F0,STM32F3,STM32F7和STM32F7都有第二个版本。在其他品牌中,供应商重新设计了每个MCU上的外设。STM32外设的设计缩短了开发时间,特别是在我们需要将应用程序移植到另一个微控制器的情况下。
相反,我不是STM32软件开发工具的忠实粉丝所以我同情谁更喜欢更容易使用的解决方案。我们将在本文后面讨论软件开发工具,所以让我们暂停这一点。
开发设施
为了帮助开发人员开始使用STM32,意法半导体已开始生产和销售一些开发套件。当我开始使用STM32开发时,有五到四个开发套件:时代变化,今天有很多开发板。
这个硬件的亮点是:
- 开发板非常便宜(通常10美元或20美元,如果复杂的显示器或类似的板子高达70美元);
- 每块板都有一个嵌入式片上调试器;
- 有很多官方和非官方资源(PLAY Embedded是非官方资源的一个例子);
- 由于这个开发板,STM32社区正在发展。
官方开发套件
通常,谁想要创建一个优秀的嵌入式产品,就会创建自己的电路板,为其配备一个或多个MCU,外部外设和所有必需的电路。这些定制板通常设计为封闭在一个漂亮的容器中。此过程通常需要一些中间步骤:
- 从最初的想法开始创建一系列要求;
- 从这些要求开始设计硬件;
- 创建绘制印刷电路板(PCB)的示意图并生成少量原型;
- 开始为板载MCU开发固件
- 执行一些测试以确保硬件设计符合最终要求;
- 如果产品与要求不匹配,或者我们固件开发已经显示设计泄漏,请返回第2点; 如果必须更改要求和想法,请返回第1点。重复循环,直到产品达到预期质量
这种循环称为产品工程,需要不可忽视的时间和金钱。我们将要介绍的开发套件的目的是减少原型设计的时间。这可以通过提供与产品的最终版本非常相似的通用硬件来实现:以这种方式,可以在开始PCB生产之前具有原型并且(可能)发现设计泄漏之前开发固件。
STM32板可分为两大类:STM32 Discovery套件和STM32 Nucleo。STM32也用于其他评估套件,称为ST评估板:我们不会在本文中讨论它们。
STM32发现套件
STM32F3 Discovery的特写镜头
的STM32发现试剂盒的开发板通常是绿色色,其被设计为覆盖因而配备有等微机电系统,显示器,特殊连接器等附加设备的特定应用领域。例如, STM32F3 Discovery是一个开发板,其板载有 STM32F303和LGD320,它是一个3轴陀螺仪和LIS303DLHC,它是一个3轴磁力计和3轴加速度计。 STM32F7 Discovery具有显示器,以太网插头,摄像头扩展器,麦克风,操纵杆和SD卡读卡器。
有十几个发现工具包,所有这些工具包都配备了ST-Link on chip调试器,在开发代码时非常有用。
STM32 Nucleo
STM32 Nucleo 是我们将要解释的基于抽象概念的开发板。STM32 Nucleo有三个主线:
- STM32 Nucleo-32配备Arduino Nano连接器;
- STM32 Nucleo-64配备Arduino Uno Rev-3连接器和一个名为ST Morpho的专用连接器;
- STM32 Nucleo-144配备了Arduino Uno Rev-3连接器和一个名为ST Zio的专用连接器。
特写镜头的STM32 Nucleo-64
数字(32,64和144)表示板载MCU的PIN数。有趣的是,每个Nucleo都与属于同一行的其他Nucleo板兼容。因此,例如STM32 Nucleo-64 F401RE引脚兼容STM32 Nucleo-64 F303RE,STM32 Nucleo-64 L476RG等。Nucleo-32和Nucleo-144也是如此。这是可能的,因为STM32 Nucleo板上配备的所有MCU都是彼此PIN兼容的,实际上每个Nucleo板的PCB实际上都是相同的,无论配备哪个MCU:使用一些PCB焊桥解决了最小的差异。
每个Nucleo(甚至Nucleo-32)都配备了嵌入式ST-Link V2-1,并且是ARM mbed Enabled。Nucleo-32和Nucleo-64的价格约为10美元,Nucleo-144的价格约为20美元。
STM32 Nucleo还可以扩展堆叠STM32 Nucleo扩展板 (也称为x-Nucleo)。这些板是基于Arduino Uno Rev3连接器的外部PCB,并配备了MEMS,低功耗蓝牙,Wi-Fi等外部设备。
文档
我们生活在用户友好的电子产品时代:我们可以设置和使用电子设备而无需阅读任何说明书。新手常常认为编程嵌入式系统同样简单。
您可以处理嵌入式系统的最大错误是将信息视为理所当然。处理嵌入式系统是逻辑问题:做错误的断言会使整个推理失效,并且最终结果认为不会起作用或者会以意想不到的方式工作。
有许多信息来源,但最重要的是MCU的官方文档。这些文档通常按参数组织并报告处理硬件所需的所有信息:在我们开发之前和期间关注它们始终是一个好主意。
处理STM32需要两个(加一个)文档:参考手册,数据表,如果我们使用官方开发工具包,则需要用户手册。这些文件通常可能非常大。我们不必全部阅读,但我们将学习如何搜索它以获取所需信息。
请在打印前考虑环境。
参考手册
该文档也简称为RM,包含有关MCU核心和外设的所有信息。这包括有关寄存器及其在内存中的映射方式的信息,有关如何启用某个外设以及如何配置它的信息,还包括必须复制代码的位置以及如何启动计算机。
一开始,每个子科只有一本参考手册。所以,有STM32F0 RM,STM32F1 RM,STM32F2 RM等等。不断发展,STM32子系列开始在同一子系列中创建功能差异:例如,原始STM32F407的时钟频率高达180 MHz,而较新的 STM32F401的时钟频率高达84 MHz。这意味着不同的时钟树,因此不同的RM。通常,RM指的是属于同一子系列的大量MCU。
要找到适合您的MCU的RM,请访问ST网站, 并在搜索框中写下您的MCU部件号。例如,STM32 Nucleo-64 F401RE配备了STM32F401RE,因此我们必须搜索STM32F401RE。在搜索结果中,我们将看到一个包含我们刚刚查找的部件号的框以及该项的说明。点击它我们将到达 产品页面 ,其中包含有关该产品的信息以及许多技术文档:RM在列表中。
如何查看st.com上的参考手册框
总结:
参考手册是一份大文档(数百或数千页),描述了MCU的核心和外设。如果您需要了解存储器或寄存器的组织方式或外设如何工作,这是正确的文档。
RM通常与MCU的子系列或其大型子集相关:您应该期望该文档在更多MCU之间共享。
数据表
数据表(也简称为DS)包含MCU的所有电气和机械信息,如绝对最大额定值,焊接信息,可用封装,闪存和RAM大小,核心频率和引脚图。
数据表比RM更具体,实际上每个MCU都有一个。无论如何,即使MCU在不同的封装中提供或具有不同的闪存/ RAM大小,它也完全由单个DS描述。例如,STM32F401RE和STM32F401CE类似,但封装除外:第一个是LQFP 64,第二个是 UFQFPN 48,但它们由相同的DS描述。实际上,相同的数据表也适合具有不同内存大小的STM32F401xD。
找到正确DS的方法实际上与RM相同。搜索您的MCU,在 产品页面 上会出现一个图标,上面写着“下载数据表”(它位于产品名称下方的顶部)。这个文件比RM短,但我再次要求你不要打印它:这是没用的,因为这些文件经常被审查(你可以看到ST文件页面底部的修订号)。
总结:
数据表是一个较短的文档(与RM相比),报告有关特定MCU的所有机械和电气信息。如果您需要了解如何焊接STM32或有多少安培/伏特能够提供IO引脚,这是正确的文档。
DS通常是与特定MCU相关的文档。
用户手册
我们需要的最后一个文档是用户手册,通常缩写为UM。本文档与开发板有关。ST为每个开发板提供UM,其中包含有关PCB的信息(包括原理图)和有关板载组件的其他信息。
如果我们需要搜索它,我们需要寻找电路板:例如,如果我们使用STM32F3发现,我们必须搜索“STM32 Discovery”而不是“STM32F3”,因为上次搜索将返回有关MCU的结果而不是开发套件。在产品页面的技术文档中,可能不仅仅是UM:下载描述硬件的UM而不是“入门......”
总结:
用户手册是一个选项文档,包含有关开发板PCB的信息。如果您需要了解如何将LED或按钮连接到MCU,这是正确的文档。
UM是与特定开发板严格相关的文档。
驱动程序
如何在设备管理器中显示正确安装的STLink
STM32开发板带有一个嵌入式片上调试器,我们将在下一篇文章中使用它们进行开发。要使用它,我们需要安装相关的驱动程序。驱动程序可以单独使用,也可以附加到名为STM32 ST-Link Utility的非常有用的工具上。转到产品页面并下载此软件。这将需要注册st.com。
安装完毕后,连接开发板并假设您使用的是Windows,在设备管理器中,您将看到USB串行总线设备下的新条目是STLink Dongle。
如果没有发生这种情况,请重新安装程序强制管理权限或评论本文:也许我们可以帮助您。
此任务所需的步骤是:
- 在Google上搜索“ST Link Utility”;
- 从st.com中选择结果;
- 选择获取软件,接受EULA并登录/注册到MyST;
- 下载并安装软件;
- 连接你的开发板;
- 打开设备管理器以检查驱动程序是否已正确安装。
为了让思考更清晰,让我们来看看下一个短视频。
使用STM32进行开发
使用STM32可以开发许多工具和嵌入式库。ST的官方解决方案是STM32Cube。另一种流行的解决方案是ARM mbed对于那些开发套件这是 ARM mbed启用。还有其他开源替代方案可以用STM32开发,包括ChibiOS,这显然是我们将要使用的。
STM32Cube
这是ST开发的一个嵌入式库,旨在减少“简化开发人员的生活,减少开发工作”。它包含演示,HAL,库,中间件和随时可用的演示。
让我列出一些PRO和CON。请考虑其中一些是基于我的个人经验,而不是一个事实:在阅读之前要注意这一点。
优点
- 开源并免费使用;
- 它支持硬件的每个特定功能;
- 它附带一个名为STM32CubeMX的图形配置器,它对配置MCU非常有帮助。
- 它还包括对显示器,MEMS等外部设备的支持;
- 代码得到积极维护;
- 有一个非常大的社区使用它。
- 是官方嵌入式库:如果您想参加STM32官方社区并需要帮助,您应该使用它
缺点
- 每个子家族都有一个不同的STM32Cube库:这意味着不容易迁移子系列。每个包甚至更多都是几百MB;
- ST没有提供随时可用的IDE,但建议使用一些第三方IDE,其中大多数都是开源的;
- HAL不够通用,不会隐藏与用户无关的细节,例如启动机器主要有很多代码行;
- 样式不一致,每个函数都有很多代码模式。
ARM mbed
这是一个集成的在线工具链,使您可以轻松地开始使用标记为ARM mbed Enabled的所有电路板,这对于大多数STM32开发板来说都是如此。
优点
- 开源并免费使用;
- 非常易于使用,并具有在线IDE;
- 大多数STM32扩展板也有代码;
- 可以为不同的MCU编译相同的代码。
缺点
- 当您连接到互联网时,您必须在浏览器中编译代码;
- 有时在线IDE很慢,这也取决于用户连接;
- 代码并不总是保持不变;
- 无法使用调试功能;
- 风格很不协调;
- 隐藏了很多细节,这常常导致用户误以为易于掌握。
ChibiOS
这是一个第三方开源和免费使用的解决方案,它带有一个随时可用的Windows for Windows和许多演示。在业余时间,我参与了ChibiOS(STM32部分)的开发,因为我喜欢这个项目背后的理念和对细节的关注。但我不会欺骗你:即使我们试图删除它们,这里也有缺点。
优点
- 开源和免费使用:它还包括免费的商业许可证;
- 配备了非常高效的RTOS和HAL以及随时可用的IDE。
- 代码灵活而优雅;
- 几乎每个STM32都受支持,非STM32 MCU也有社区支持
- 可以为不同的MCU编译相同的代码。
- 代码得到积极维护;
- 有一个大型社区使用它。
缺点
- 即用型IDE不是那么用户友好;
- 每个x-Nucleo都不支持;
- 并非所有MCU的特定功能都受支持;
- 免费支持完全是自愿的;
- 文档面向专业,而不是特别针对初学者。
结论性说明
在下一篇文章中,我们将提供STM32 Nucleo-64 F401RE和STM32 Discovery F3 Revision C的代码示例 。我们的想法是为两个不同的MCU提供代码示例,以指出代码方面的所有差异,并帮助读者理解如何编写易于在两个不同MCU之间移植的代码。
两块板都配有STLink V2-1(此信息在机箱和UM中)。因此,在继续下一篇文章之前,需要:
- 下载与您将要使用的开发板和MCU相关的文档;
- 安装 STM32 ST-Link Utility 并验证驱动程序是否已正确安装。
从0到STM32
发表于 2017年7月17日 更新了 2018年6月19日
物联网的基石
如今,我们被能够做出令人难以置信的事物的智能物体所包围。这些被称为智能物品的物体现在能够通过不同的有线和无线通信通道进行通信。显而易见的结果是,这些对象能够通过互联网获取和推送数据:这种现象,即智能物联网,通常被称为物联网 或物联网。
物联网的普及主要是由于两个主要原因: - 微控制器的发展,在价格下降的同时提高了性能;
- 开源的扩散,今天我们完全免费提供高质量的编译器,调试器和嵌入式库。
-
什么是微控制器?
微控制器单元或(MCU)是集成在单个小芯片中的完整计算机系统。
流行的串口通讯RS232电缆。这个定义会让没有经验的用户感到困惑,他们想象一台计算机就像连接到屏幕,鼠标和键盘的大金属机箱。实际上,计算机的基本概念是 连接到一个或多个存储器的处理器或CPU的集合,其也可以通过通信总线连接到不同的I / O外围设备。
MCU完全符合这一概念,但其外围设备与键盘,VGA显示器,鼠标等完全不同。相反,它们是简单的I / O端口,定时器,模数转换器或标准通信外设,如通用异步接收器发送器或UART,它是用于实现着名RS232 的外设(见图1)。
所有这些(以及更多)都嵌入在一个芯片中,这就是专业人士将MCU称为 嵌入式系统的原因。
CPU和MCU之间的区别
在过去几年中,半导体行业发展如此之快,以至于今天我们拥有广泛的电子设备和许多变体。因此,定义明确的计算设备组是不容易的。例如,在开始时,处理单元通常是彼此互连的芯片集合:整个芯片和互连集合通常表示为中央处理单元(CPU)。随着技术的发展,他们开始创造小型CPU,其特点是全部集成在一个小芯片中,因此它们被称为微处理器单元(MPU)。
如今,很难区分MPU和CPU:我们模糊地称它们为CPU或微处理器或应用程序核心。无论如何,我们可以断言MCU(微控制器)和CPU(应用程序核心)之间仍然存在很大差异。
第一个区别在于两个单元背后的概念:
- 应用程序核心(CPU)是一种用于计算大量操作(通常很复杂)的芯片,但它不是嵌入式存储器(小型高速缓存除外),也不是总线和外设。
- 微控制器(MCU)是一种设计为独立设备的芯片,即使与应用核心相比性能下降,也易于集成在小型设备中。它通常嵌入一个或多个RAM存储器,一个或多个闪存和一系列外设,如定时器,通信专用外设,转换器等。
-
从这个角度来看,我们可以断言:
MCU的内部连接到易失性存储器(RAM),非易失性存储器(NVM),通常是闪存和一些外设。
第二个区别与之前的陈述有关:因为它们是为不同目的而设计的,所以表现完全不同。
- CPU通常具有Giga-Hertz数量级的时钟频率,接口连接到千兆字节的外部RAM和数百千兆字节的外部SSD或HDD。在某些情况下,它还集成了GPU(图形处理单元)或专用计算单元。有时它集成了RAM控制器,但没有别的。SATA,以太网等控制器通常位于芯片外部。
- 相反,MCU具有几十或几百兆赫的时钟频率,嵌入很少达到100 kB的RAM和很少达到1 MB的NVM。它嵌入了外围设备和接口,在高端MCU的情况下,通常还集成了以太网控制器。
-
MCU在计算能力或RAM /存储能力方面通常不具有极高的性能。另一方面,CPU具有更大的功耗并且难以封装在小尺寸的PCB中。
ARM Cortex架构
臂?
如果这不是您第一次阅读嵌入式系统,那么您肯定听说过ARM或ARM Cortex。关于这一点经常会有一些混乱,所以我们将花费很少的话来解决这个问题。
最初代表Acorn RISC Machine的ARM是精简指令集计算机(RISC)机器的架构名称。体系结构是“描述计算机系统的功能,组织和实现的一组规则和方法”,而计算机芯片是体系结构的物理实现。Acorn RISC机器也是如此:计算机的架构。ARM本身在设计和功耗方面非常有趣,这个想法背后的人们开始实现更多的架构,而ARM成为了一个品牌。
如今,ARM设计的架构主要用于我们日常使用的大部分产品中。
ARM本身不生产芯片。它设计销售许可证以使用其知识产权的架构。许多半导体公司购买此许可证以生产自己的芯片。
STMicroelectronics的STM32是一个基于ARM架构的芯片的例子,但是由ST的半导体公司生产。ST不是唯一一个这样的人:高通,Apple,德州仪器,Microchip,英飞凌和许多其他公司都使用ARM架构。
皮质:M,A和R.
ARM主要有三种有趣的架构,它们是常用的并且众所周知:
- ARM Cortex-M
- ARM Cortex-A
- ARM Cortex-R
-
Cortex-M的
该架构旨在拥有体积最小,功耗最低的Cortex处理器。这种处理器针对确定性和实时嵌入式处理进行了优化:因此,在这种情况下,M代表微控制器。
我们谈论的是32位MCU,时钟频率范围为24-400兆赫兹,嵌入式闪存高达几兆字节,嵌入式系统高达数百千字节。Cortex-M是一系列架构的名称,包括M0,M0 +,M3,M4,M7,现在还包括M23和M33。
ARM Cortex-M架构适用于所有需要处理硬件并面向低功耗的应用。
的Cortex-A
该架构旨在达到最高性能水平。这种处理器针对应用进行了优化:因此,在这种情况下,A代表应用程序。
我们谈论的是64/32位应用核心,时钟频率为千兆赫兹,它没有嵌入闪存或RAM。Cortex-A是一系列架构的名称,包括A5,A7,A32,A35,A8,A9,A53,A55,A15,A17,A57,A72,A73和A75。
Cortex-A系列处理器已经开发用于运行一些架构扩展,如TrustZone,big.LITTLE和浮点架构。
的Cortex-R
该架构专为硬实时应用而设计。这种处理器为嵌入式系统提供高性能计算解决方案,其中需要可靠性,高可用性,容错性和/或确定性实时响应:在这种情况下,实时R链
通常,Cortex-R是一个MCU,其中两个内核执行相同的代码,外部单元逐步检查两个芯片之间的一致性。此模式称为Lockstep。
Cortex-R是一系列架构的名称,包括R4,R5,R7,R7和R52。
介绍STM32
STM32是意法半导体的一系列基于ARM Cortex-M的32位微控制器。STM32分为子系列,每个子系列都基于特定的Cortex-M架构,并拥有自己的一组外设。随着数百种不同的MCU,STM32系列不断扩展,但问题是:为什么这么多不同的MCU呢?
答案很简单:每个MCU在闪存和RAM存储器,时钟频率,引脚号和芯片封装方面都有不同的尺寸。更重要的是,每个芯片具有不同的外围设备和不同的数量。该策略提供了选择非常接近用户需求的MCU的机会。
亚科
STM32 MCU的名称由字母和数字组成 ,形式为STM32 XNMMOO,而X是字母,NMM是三个数字,OO是两个字母。例如,我们有STM32 F303VC,STM32 L476ZG,STM3 2F401RE,STM32 F407VG等。亚家族由X和N识别,因此在我们的例子中,亚家族是F3,L4,F4和(再次)F4。
可以做的第一个大的区别是与X字母有关。目前我们有三条线:F线,L线和H线。
- 在F-线 是第一个系列STM32微控制器的。目前它分为6 个子系列STM32F0,STM32F1,STM32F2,STM32F3,STM32F4和STM32F7。
- 的L-线是低功率系列STM32的MCU。目前它分为三个子系列STM32L0,STM32L1 和STM32L4。
- 该H-线 已经被新引入的,是一个非常高的表演系列32位MCU。目前它仅包括STM32H7亚家族。
-
每个STM32都提供大量外设,所有外设都提供完整的可配置时钟树,内置PLL,多通道DMA,定时器,串行线调试,ADC,USART,SPI,I2C和RTC。每个微控制器之间的区别在于这些外设的数量和特性。例如,面向低功耗的STM32L4具有特殊的低功耗定时器以及具有低功耗的多速内部PLL的MSI。相反,STM32F3有一个特殊的定时器,它提供多达六个通道及其否定:这种定时器面向全桥控制。此外,STM32F373配备了16位ADC Sigma Delta,而STM32通常提供12位ADC。
另一个区别是特定外设的数量,例如某些STM32具有更多的独立定时器或USART。因此,选择合适的STM32肯定取决于应用程序。
当然,每个子系列在时钟速度,RAM和闪存大小方面也提供不同的性能。每个子系列通常都有一些特定的外围设备,使其独一无二。下表是对子族之间主要差异的非详尽总结。
STM32Fx系列
F-line在性能和外设方面提供广泛的解决方案。
亚家族 建筑 电压(V) FCPU(MHz) Flash(字节) RAM(kB) 特殊外围设备 STM32F0 ARM Cortex-M0 1.8 / 2.0到3.6 48 16k到256k 4到32岁 12位DAC,CAN,CEC,无晶体USB,触摸感应 STM32F1 ARM Cortex-M3 2.0至3.6 24至72岁 16k到1M 4到96 USB 2.0 FS / OTG,CAN 2.0B,FSCM,3相定时器,SDIO,以太网,HDMI CEC,I2S STM32F2 ARM Cortex-M3 1.7至3.6 120 128k到1M 高达128 加密,2×12位DAC,以太网,摄像头,FSMC STM32F3 ARM Cortex-M4 1.8 / 2.0到3.6 72 32k到512k 16至80岁 SPFPU,16位ADC,12位DAC,比较器,运算放大器,高级TIM,高分频定时器 STM32F4 ARM Cortex-M4 1.7至3.6 84到180 64k到1.5M 32至384 SPFPU,以太网,CAN,摄像头,双四SPI,SPDIF,SAI,Chrom-ART,TFT LCD控制器,MIPI DSI STM32F7 ARM Cortex-M7 1.7至3.6 216 256k到2M 256到512 DP / SPFPU,L1缓存,JPEG编解码器,CAN,DFSDM,TFT LCD,MIPI DSI STM32Lx系列
L-line更加注重低功耗:每个STM32Lx都具有动态电压调节功能,特殊的低功耗时钟源,高级RTC。
亚家族 建筑 电压(V) FCPU(MHz) Flash(字节) RAM(kB) 特殊外围设备 STM32L0 ARM Cortex-M0 + 1.65至3.6 32 高达64k 8 AES 128位,LP UART,LP定时器,12位DAC,触摸感应,TRNG,无晶体USB段式LCD驱动器 STM32L1 ARM Cortex-M3 1.65至3.6 32 32k到512k 4到80岁 12位DAC,运算放大器,比较器,电容式触摸,段式LCD驱动器,AES 128位 STM32L4 ARM Cortex-M4 1.7至3.6 80 128k到1M 64至320 SAI,SAI,Chrom-ART,AES 128/256位,段式LCD驱动器,USB 2.0 OTG FS,12位DAC,电容式触摸 这些MCU可以在不同模式下工作,这会影响电流消耗。
STM32L0的当前消耗参考值为:
- 动态运行模式:低至87μA/ MHz
- 超低功耗模式+全RAM +低功耗定时器:440 nA(16条唤醒线)
- 超低功耗模式+备份寄存器:250 nA(3个唤醒引脚)
- 唤醒时间:3.5μs
-
STM32L1的当前消耗参考值为:
- 超低功耗模式:280 nA,带备用寄存器(3个唤醒引脚)
- 超低功耗模式+ RTC:900 nA,带备用寄存器(3个唤醒引脚)
- 低功耗运行模式:低至9μA
- 动态运行模式:低至177μA/ MHz
-
STM32L4的当前消耗参考值为:
- 超低功耗模式:8 nA,备用寄存器,无实时时钟(5个唤醒引脚)
- 超低功耗模式+ RTC:200 nA,带备用寄存器(5个唤醒引脚)
- 超低功耗模式+ 16 KB RAM:200 nA
- 超低功耗模式+ 16 KB RAM + RTC:450 nA
- 动态运行模式:低至36μA/ MHz
- 唤醒时间:5μs
-
STM32Hx系列
该子系列是新一代高性能微控制器系列。据了解,该子系列是ARM Cortex-M7 MCU,时钟频率高达400MHz。所有STM32H均配备USB 2.0 OTG FS / HS,SDMMC,USART,SPI,I2C,HDMI-CEC,比较器,运算放大器,I2S,SAI,12位DAC,SPDIF-RX,LCD TFT控制器,Chrom- ART,加密选项,TRNG,DFSDM,16/32位定时器和最高2 Msps的14位ADC。
亚家族 建筑 电压(V) FCPU(MHz) Flash(字节) RAM(字节) 空间外围设备 STM32H7 ARM Cortex-M7 1.7至3.6 400 2M双银行 1M 双精度FPU,双Quad-SPI,以太网,摄像头 个人笔记,比较,误解
看看前面的表格,我们应该清楚地知道时钟频率,RAM和闪存大小的范围。在我的嵌入式世界之旅中,我经常听说STM32和Arduino或Arduino和Raspberry之间的比较等等。本段旨在回答一些常见问题,并指出误解。
STM32还是Arduino哪个更好?
这个问题没有任何意义。这个问题听起来像“Intel i7或HP Compaq,哪个更好?”STM32是一个微控制器,Arduino是一系列开源开发板,而且,Arduino STAR Otto配备了STM32F469。
尝试解码这个非常常见的问题,通常处理Arduino的人使用Arduino Uno或Arduino Mega,因为很容易找到准备使用这些开发板的库。Arduino UNO搭载了一款ATmega328P,它是Microchip(之前的Atmel)的8位AVR MCU,时钟速度高达20 MHz,闪存为32kB,RAM为2kB。那么,就性能而言,当然最好选择提供更高MIPS(每秒百万条指令)的STM32 ,更大的外设和VLSI芯片组。另一方面,没有任何电子知识的初学者通常更喜欢使用易于使用的Arduino,这要归功于黑盒子范例:Arduino API通常倾向于向用户隐藏问题以换取缺乏性能和/或多功能性。
我个人认为,这是帮助业余爱好者 或年轻人接近嵌入式系统的好方法,但对于应该解决和解决问题的工程师或专业人员来说,这不是一个好的解决方案。
必须要做的另一个考虑因素是表演不是最重要的事情。在某些应用中,小型微控制器足以完成您必须做的事情:在这些情况下,我们应该考虑开发产品所需的时间或MCU本身的价格,甚至是整个系统的功耗。例如,如果应用程序是一个小型传感器节点,每天必须获取一次环境信息并且由小型电池供电,则必须考虑低功耗MCU。
STM32还是Raspberry Pi?
同样,这个问题没有任何意义。STM32是一个微控制器,Raspberry Pi是一系列应用开发板。更多的Raspberry Pi主板有不同的目标:应用程序!Raspberry Pi 3配备了Broadcom BCM2837,这是一款四核1.2GHz 64位ARM Cortex-A53。将Cortex-A与Cortex-M进行比较以及将8位与32位微控制器进行比较是不寻常的。
Cortex-A通常运行Linux或其他复杂的操作系统,不是特别针对实时应用程序,而是通常用于驱动LCD并执行图形或数据过滤所需的大量操作。Cortex-M通常运行RTOS(实时操作系统),面向硬件并创建实时解决方案。
总结选择取决于最终的应用。请注意,我们经常提到“实时”一词:我们将在下面的教程中指出这意味着什么。
有很多基于ARM Cortex-M的MCU:为什么选择STM32?
我在2013年开始使用微控制器,而不是你常说的极客。我从STM32F3开始,经过一些初步的困难,几个月后我就可以在日常应用中使用它了。一年后,我非常热衷于这个新工具,我开始制作关于这个论点的视频和教程。但我是一个好奇的家伙,所以我开始探索其他选择:我有机会使用Arduino Uno,Arduino Mega,Arduino Due,Freescale MK20和MK64,Infineon XMC1100,Texas TIVA C TM4123G,STMicroelectronics SPC560D,几乎每个STM32(除了STM32H7,但是时间问题)和一些其他非MCU可编程器件。
好吧,我必须说(我个人的意见),STM32的文档是我见过的最准确的。我也喜欢STM32提供的内部外围设备:有趣的是外围设备通常不会在整个子系列中发生变化,并且某些子系列具有相同类型的外设。为了更好地解释这个,让我举个例子:SPI有两个版本。STM32F1,STM32F2,STM32F4,STM32L0和STM32L1的第一个版本STM32F0,STM32F3,STM32F7和STM32F7都有第二个版本。在其他品牌中,供应商重新设计了每个MCU上的外设。STM32外设的设计缩短了开发时间,特别是在我们需要将应用程序移植到另一个微控制器的情况下。
相反,我不是STM32软件开发工具的忠实粉丝所以我同情谁更喜欢更容易使用的解决方案。我们将在本文后面讨论软件开发工具,所以让我们暂停这一点。
开发设施
为了帮助开发人员开始使用STM32,意法半导体已开始生产和销售一些开发套件。当我开始使用STM32开发时,有五到四个开发套件:时代变化,今天有很多开发板。
这个硬件的亮点是:
- 开发板非常便宜(通常10美元或20美元,如果复杂的显示器或类似的板子高达70美元);
- 每块板都有一个嵌入式片上调试器;
- 有很多官方和非官方资源(PLAY Embedded是非官方资源的一个例子);
- 由于这个开发板,STM32社区正在发展。
-
官方开发套件
通常,谁想要创建一个优秀的嵌入式产品,就会创建自己的电路板,为其配备一个或多个MCU,外部外设和所有必需的电路。这些定制板通常设计为封闭在一个漂亮的容器中。此过程通常需要一些中间步骤:
- 从最初的想法开始创建一系列要求;
- 从这些要求开始设计硬件;
- 创建绘制印刷电路板(PCB)的示意图并生成少量原型;
- 开始为板载MCU开发固件
- 执行一些测试以确保硬件设计符合最终要求;
- 如果产品与要求不匹配,或者我们固件开发已经显示设计泄漏,请返回第2点; 如果必须更改要求和想法,请返回第1点。重复循环,直到产品达到预期质量
-
这种循环称为产品工程,需要不可忽视的时间和金钱。我们将要介绍的开发套件的目的是减少原型设计的时间。这可以通过提供与产品的最终版本非常相似的通用硬件来实现:以这种方式,可以在开始PCB生产之前具有原型并且(可能)发现设计泄漏之前开发固件。
STM32板可分为两大类:STM32 Discovery套件和STM32 Nucleo。STM32也用于其他评估套件,称为ST评估板:我们不会在本文中讨论它们。
STM32发现套件
的STM32发现试剂盒的开发板通常是绿色色,其被设计为覆盖因而配备有等微机电系统,显示器,特殊连接器等附加设备的特定应用领域。例如, STM32F3 Discovery是一个开发板,其板载有 STM32F303和LGD320,它是一个3轴陀螺仪和LIS303DLHC,它是一个3轴磁力计和3轴加速度计。 STM32F7 Discovery具有显示器,以太网插头,摄像头扩展器,麦克风,操纵杆和SD卡读卡器。
有十几个发现工具包,所有这些工具包都配备了ST-Link on chip调试器,在开发代码时非常有用。
STM32 Nucleo
STM32 Nucleo 是我们将要解释的基于抽象概念的开发板。STM32 Nucleo有三个主线:
- STM32 Nucleo-32配备Arduino Nano连接器;
- STM32 Nucleo-64配备Arduino Uno Rev-3连接器和一个名为ST Morpho的专用连接器;
- STM32 Nucleo-144配备了Arduino Uno Rev-3连接器和一个名为ST Zio的专用连接器。
-
STM32 Nucleo还可以扩展堆叠STM32 Nucleo扩展板 (也称为x-Nucleo)。这些板是基于Arduino Uno Rev3连接器的外部PCB,并配备了MEMS,低功耗蓝牙,Wi-Fi等外部设备。
文档
我们生活在用户友好的电子产品时代:我们可以设置和使用电子设备而无需阅读任何说明书。新手常常认为编程嵌入式系统同样简单。
您可以处理嵌入式系统的最大错误是将信息视为理所当然。处理嵌入式系统是逻辑问题:做错误的断言会使整个推理失效,并且最终结果认为不会起作用或者会以意想不到的方式工作。
有许多信息来源,但最重要的是MCU的官方文档。这些文档通常按参数组织并报告处理硬件所需的所有信息:在我们开发之前和期间关注它们始终是一个好主意。
处理STM32需要两个(加一个)文档:参考手册,数据表,如果我们使用官方开发工具包,则需要用户手册。这些文件通常可能非常大。我们不必全部阅读,但我们将学习如何搜索它以获取所需信息。
请在打印前考虑环境。
参考手册
该文档也简称为RM,包含有关MCU核心和外设的所有信息。这包括有关寄存器及其在内存中的映射方式的信息,有关如何启用某个外设以及如何配置它的信息,还包括必须复制代码的位置以及如何启动计算机。
一开始,每个子科只有一本参考手册。所以,有STM32F0 RM,STM32F1 RM,STM32F2 RM等等。不断发展,STM32子系列开始在同一子系列中创建功能差异:例如,原始STM32F407的时钟频率高达180 MHz,而较新的 STM32F401的时钟频率高达84 MHz。这意味着不同的时钟树,因此不同的RM。通常,RM指的是属于同一子系列的大量MCU。
要找到适合您的MCU的RM,请访问ST网站, 并在搜索框中写下您的MCU部件号。例如,STM32 Nucleo-64 F401RE配备了STM32F401RE,因此我们必须搜索STM32F401RE。在搜索结果中,我们将看到一个包含我们刚刚查找的部件号的框以及该项的说明。点击它我们将到达 产品页面 ,其中包含有关该产品的信息以及许多技术文档:RM在列表中。
总结:
参考手册是一份大文档(数百或数千页),描述了MCU的核心和外设。如果您需要了解存储器或寄存器的组织方式或外设如何工作,这是正确的文档。
RM通常与MCU的子系列或其大型子集相关:您应该期望该文档在更多MCU之间共享。
数据表
数据表(也简称为DS)包含MCU的所有电气和机械信息,如绝对最大额定值,焊接信息,可用封装,闪存和RAM大小,核心频率和引脚图。
数据表比RM更具体,实际上每个MCU都有一个。无论如何,即使MCU在不同的封装中提供或具有不同的闪存/ RAM大小,它也完全由单个DS描述。例如,STM32F401RE和STM32F401CE类似,但封装除外:第一个是LQFP 64,第二个是 UFQFPN 48,但它们由相同的DS描述。实际上,相同的数据表也适合具有不同内存大小的STM32F401xD。
找到正确DS的方法实际上与RM相同。搜索您的MCU,在 产品页面 上会出现一个图标,上面写着“下载数据表”(它位于产品名称下方的顶部)。这个文件比RM短,但我再次要求你不要打印它:这是没用的,因为这些文件经常被审查(你可以看到ST文件页面底部的修订号)。
总结:
数据表是一个较短的文档(与RM相比),报告有关特定MCU的所有机械和电气信息。如果您需要了解如何焊接STM32或有多少安培/伏特能够提供IO引脚,这是正确的文档。
DS通常是与特定MCU相关的文档。
用户手册
我们需要的最后一个文档是用户手册,通常缩写为UM。本文档与开发板有关。ST为每个开发板提供UM,其中包含有关PCB的信息(包括原理图)和有关板载组件的其他信息。
如果我们需要搜索它,我们需要寻找电路板:例如,如果我们使用STM32F3发现,我们必须搜索“STM32 Discovery”而不是“STM32F3”,因为上次搜索将返回有关MCU的结果而不是开发套件。在产品页面的技术文档中,可能不仅仅是UM:下载描述硬件的UM而不是“入门......”
总结:
用户手册是一个选项文档,包含有关开发板PCB的信息。如果您需要了解如何将LED或按钮连接到MCU,这是正确的文档。
UM是与特定开发板严格相关的文档。
驱动程序
STM32开发板带有一个嵌入式片上调试器,我们将在下一篇文章中使用它们进行开发。要使用它,我们需要安装相关的驱动程序。驱动程序可以单独使用,也可以附加到名为STM32 ST-Link Utility的非常有用的工具上。转到产品页面并下载此软件。这将需要注册st.com。
安装完毕后,连接开发板并假设您使用的是Windows,在设备管理器中,您将看到USB串行总线设备下的新条目是STLink Dongle。
如果没有发生这种情况,请重新安装程序强制管理权限或评论本文:也许我们可以帮助您。
此任务所需的步骤是:
- 在Google上搜索“ST Link Utility”;
- 从st.com中选择结果;
- 选择获取软件,接受EULA并登录/注册到MyST;
- 下载并安装软件;
- 连接你的开发板;
- 打开设备管理器以检查驱动程序是否已正确安装。
-
为了让思考更清晰,让我们来看看下一个短视频。
使用STM32进行开发
使用STM32可以开发许多工具和嵌入式库。ST的官方解决方案是STM32Cube。另一种流行的解决方案是ARM mbed对于那些开发套件这是 ARM mbed启用。还有其他开源替代方案可以用STM32开发,包括ChibiOS,这显然是我们将要使用的。
STM32Cube
这是ST开发的一个嵌入式库,旨在减少“简化开发人员的生活,减少开发工作”。它包含演示,HAL,库,中间件和随时可用的演示。
让我列出一些PRO和CON。请考虑其中一些是基于我的个人经验,而不是一个事实:在阅读之前要注意这一点。
优点
- 开源并免费使用;
- 它支持硬件的每个特定功能;
- 它附带一个名为STM32CubeMX的图形配置器,它对配置MCU非常有帮助。
- 它还包括对显示器,MEMS等外部设备的支持;
- 代码得到积极维护;
- 有一个非常大的社区使用它。
- 是官方嵌入式库:如果您想参加STM32官方社区并需要帮助,您应该使用它
-
缺点
- 每个子家族都有一个不同的STM32Cube库:这意味着不容易迁移子系列。每个包甚至更多都是几百MB;
- ST没有提供随时可用的IDE,但建议使用一些第三方IDE,其中大多数都是开源的;
- HAL不够通用,不会隐藏与用户无关的细节,例如启动机器主要有很多代码行;
- 样式不一致,每个函数都有很多代码模式。
-
ARM mbed
这是一个集成的在线工具链,使您可以轻松地开始使用标记为ARM mbed Enabled的所有电路板,这对于大多数STM32开发板来说都是如此。
优点
- 开源并免费使用;
- 非常易于使用,并具有在线IDE;
- 大多数STM32扩展板也有代码;
- 可以为不同的MCU编译相同的代码。
-
缺点
- 当您连接到互联网时,您必须在浏览器中编译代码;
- 有时在线IDE很慢,这也取决于用户连接;
- 代码并不总是保持不变;
- 无法使用调试功能;
- 风格很不协调;
- 隐藏了很多细节,这常常导致用户误以为易于掌握。
-
ChibiOS
这是一个第三方开源和免费使用的解决方案,它带有一个随时可用的Windows for Windows和许多演示。在业余时间,我参与了ChibiOS(STM32部分)的开发,因为我喜欢这个项目背后的理念和对细节的关注。但我不会欺骗你:即使我们试图删除它们,这里也有缺点。
优点
- 开源和免费使用:它还包括免费的商业许可证;
- 配备了非常高效的RTOS和HAL以及随时可用的IDE。
- 代码灵活而优雅;
- 几乎每个STM32都受支持,非STM32 MCU也有社区支持
- 可以为不同的MCU编译相同的代码。
- 代码得到积极维护;
- 有一个大型社区使用它。
-
缺点
- 即用型IDE不是那么用户友好;
- 每个x-Nucleo都不支持;
- 并非所有MCU的特定功能都受支持;
- 免费支持完全是自愿的;
- 文档面向专业,而不是特别针对初学者。
-
结论性说明
在下一篇文章中,我们将提供STM32 Nucleo-64 F401RE和STM32 Discovery F3 Revision C的代码示例 。我们的想法是为两个不同的MCU提供代码示例,以指出代码方面的所有差异,并帮助读者理解如何编写易于在两个不同MCU之间移植的代码。
两块板都配有STLink V2-1(此信息在机箱和UM中)。因此,在继续下一篇文章之前,需要:
- 下载与您将要使用的开发板和MCU相关的文档;
- 安装 STM32 ST-Link Utility 并验证驱动程序是否已正确安装。
从0到STM32
发表于 2017年7月17日 更新了 2018年6月19日
物联网的基石
如今,我们被能够做出令人难以置信的事物的智能物体所包围。这些被称为智能物品的物体现在能够通过不同的有线和无线通信通道进行通信。显而易见的结果是,这些对象能够通过互联网获取和推送数据:这种现象,即智能物联网,通常被称为物联网 或物联网。
物联网的普及主要是由于两个主要原因: - 微控制器的发展,在价格下降的同时提高了性能;
- 开源的扩散,今天我们完全免费提供高质量的编译器,调试器和嵌入式库。
-
什么是微控制器?
微控制器单元或(MCU)是集成在单个小芯片中的完整计算机系统。
流行的串口通讯RS232电缆。这个定义会让没有经验的用户感到困惑,他们想象一台计算机就像连接到屏幕,鼠标和键盘的大金属机箱。实际上,计算机的基本概念是 连接到一个或多个存储器的处理器或CPU的集合,其也可以通过通信总线连接到不同的I / O外围设备。
MCU完全符合这一概念,但其外围设备与键盘,VGA显示器,鼠标等完全不同。相反,它们是简单的I / O端口,定时器,模数转换器或标准通信外设,如通用异步接收器发送器或UART,它是用于实现着名RS232 的外设(见图1)。
所有这些(以及更多)都嵌入在一个芯片中,这就是专业人士将MCU称为 嵌入式系统的原因。
CPU和MCU之间的区别
在过去几年中,半导体行业发展如此之快,以至于今天我们拥有广泛的电子设备和许多变体。因此,定义明确的计算设备组是不容易的。例如,在开始时,处理单元通常是彼此互连的芯片集合:整个芯片和互连集合通常表示为中央处理单元(CPU)。随着技术的发展,他们开始创造小型CPU,其特点是全部集成在一个小芯片中,因此它们被称为微处理器单元(MPU)。
如今,很难区分MPU和CPU:我们模糊地称它们为CPU或微处理器或应用程序核心。无论如何,我们可以断言MCU(微控制器)和CPU(应用程序核心)之间仍然存在很大差异。
第一个区别在于两个单元背后的概念:
- 应用程序核心(CPU)是一种用于计算大量操作(通常很复杂)的芯片,但它不是嵌入式存储器(小型高速缓存除外),也不是总线和外设。
- 微控制器(MCU)是一种设计为独立设备的芯片,即使与应用核心相比性能下降,也易于集成在小型设备中。它通常嵌入一个或多个RAM存储器,一个或多个闪存和一系列外设,如定时器,通信专用外设,转换器等。
-
从这个角度来看,我们可以断言:
MCU的内部连接到易失性存储器(RAM),非易失性存储器(NVM),通常是闪存和一些外设。
第二个区别与之前的陈述有关:因为它们是为不同目的而设计的,所以表现完全不同。
- CPU通常具有Giga-Hertz数量级的时钟频率,接口连接到千兆字节的外部RAM和数百千兆字节的外部SSD或HDD。在某些情况下,它还集成了GPU(图形处理单元)或专用计算单元。有时它集成了RAM控制器,但没有别的。SATA,以太网等控制器通常位于芯片外部。
- 相反,MCU具有几十或几百兆赫的时钟频率,嵌入很少达到100 kB的RAM和很少达到1 MB的NVM。它嵌入了外围设备和接口,在高端MCU的情况下,通常还集成了以太网控制器。
-
MCU在计算能力或RAM /存储能力方面通常不具有极高的性能。另一方面,CPU具有更大的功耗并且难以封装在小尺寸的PCB中。
ARM Cortex架构
臂?
如果这不是您第一次阅读嵌入式系统,那么您肯定听说过ARM或ARM Cortex。关于这一点经常会有一些混乱,所以我们将花费很少的话来解决这个问题。
最初代表Acorn RISC Machine的ARM是精简指令集计算机(RISC)机器的架构名称。体系结构是“描述计算机系统的功能,组织和实现的一组规则和方法”,而计算机芯片是体系结构的物理实现。Acorn RISC机器也是如此:计算机的架构。ARM本身在设计和功耗方面非常有趣,这个想法背后的人们开始实现更多的架构,而ARM成为了一个品牌。
如今,ARM设计的架构主要用于我们日常使用的大部分产品中。
ARM本身不生产芯片。它设计销售许可证以使用其知识产权的架构。许多半导体公司购买此许可证以生产自己的芯片。
STMicroelectronics的STM32是一个基于ARM架构的芯片的例子,但是由ST的半导体公司生产。ST不是唯一一个这样的人:高通,Apple,德州仪器,Microchip,英飞凌和许多其他公司都使用ARM架构。
皮质:M,A和R.
ARM主要有三种有趣的架构,它们是常用的并且众所周知:
- ARM Cortex-M
- ARM Cortex-A
- ARM Cortex-R
-
Cortex-M的
该架构旨在拥有体积最小,功耗最低的Cortex处理器。这种处理器针对确定性和实时嵌入式处理进行了优化:因此,在这种情况下,M代表微控制器。
我们谈论的是32位MCU,时钟频率范围为24-400兆赫兹,嵌入式闪存高达几兆字节,嵌入式系统高达数百千字节。Cortex-M是一系列架构的名称,包括M0,M0 +,M3,M4,M7,现在还包括M23和M33。
ARM Cortex-M架构适用于所有需要处理硬件并面向低功耗的应用。
的Cortex-A
该架构旨在达到最高性能水平。这种处理器针对应用进行了优化:因此,在这种情况下,A代表应用程序。
我们谈论的是64/32位应用核心,时钟频率为千兆赫兹,它没有嵌入闪存或RAM。Cortex-A是一系列架构的名称,包括A5,A7,A32,A35,A8,A9,A53,A55,A15,A17,A57,A72,A73和A75。
Cortex-A系列处理器已经开发用于运行一些架构扩展,如TrustZone,big.LITTLE和浮点架构。
的Cortex-R
该架构专为硬实时应用而设计。这种处理器为嵌入式系统提供高性能计算解决方案,其中需要可靠性,高可用性,容错性和/或确定性实时响应:在这种情况下,实时R链
通常,Cortex-R是一个MCU,其中两个内核执行相同的代码,外部单元逐步检查两个芯片之间的一致性。此模式称为Lockstep。
Cortex-R是一系列架构的名称,包括R4,R5,R7,R7和R52。
介绍STM32
STM32是意法半导体的一系列基于ARM Cortex-M的32位微控制器。STM32分为子系列,每个子系列都基于特定的Cortex-M架构,并拥有自己的一组外设。随着数百种不同的MCU,STM32系列不断扩展,但问题是:为什么这么多不同的MCU呢?
答案很简单:每个MCU在闪存和RAM存储器,时钟频率,引脚号和芯片封装方面都有不同的尺寸。更重要的是,每个芯片具有不同的外围设备和不同的数量。该策略提供了选择非常接近用户需求的MCU的机会。
亚科
STM32 MCU的名称由字母和数字组成 ,形式为STM32 XNMMOO,而X是字母,NMM是三个数字,OO是两个字母。例如,我们有STM32 F303VC,STM32 L476ZG,STM3 2F401RE,STM32 F407VG等。亚家族由X和N识别,因此在我们的例子中,亚家族是F3,L4,F4和(再次)F4。
可以做的第一个大的区别是与X字母有关。目前我们有三条线:F线,L线和H线。
- 在F-线 是第一个系列STM32微控制器的。目前它分为6 个子系列STM32F0,STM32F1,STM32F2,STM32F3,STM32F4和STM32F7。
- 的L-线是低功率系列STM32的MCU。目前它分为三个子系列STM32L0,STM32L1 和STM32L4。
- 该H-线 已经被新引入的,是一个非常高的表演系列32位MCU。目前它仅包括STM32H7亚家族。
-
每个STM32都提供大量外设,所有外设都提供完整的可配置时钟树,内置PLL,多通道DMA,定时器,串行线调试,ADC,USART,SPI,I2C和RTC。每个微控制器之间的区别在于这些外设的数量和特性。例如,面向低功耗的STM32L4具有特殊的低功耗定时器以及具有低功耗的多速内部PLL的MSI。相反,STM32F3有一个特殊的定时器,它提供多达六个通道及其否定:这种定时器面向全桥控制。此外,STM32F373配备了16位ADC Sigma Delta,而STM32通常提供12位ADC。
另一个区别是特定外设的数量,例如某些STM32具有更多的独立定时器或USART。因此,选择合适的STM32肯定取决于应用程序。
当然,每个子系列在时钟速度,RAM和闪存大小方面也提供不同的性能。每个子系列通常都有一些特定的外围设备,使其独一无二。下表是对子族之间主要差异的非详尽总结。
STM32Fx系列
F-line在性能和外设方面提供广泛的解决方案。
亚家族 建筑 电压(V) FCPU(MHz) Flash(字节) RAM(kB) 特殊外围设备 STM32F0 ARM Cortex-M0 1.8 / 2.0到3.6 48 16k到256k 4到32岁 12位DAC,CAN,CEC,无晶体USB,触摸感应 STM32F1 ARM Cortex-M3 2.0至3.6 24至72岁 16k到1M 4到96 USB 2.0 FS / OTG,CAN 2.0B,FSCM,3相定时器,SDIO,以太网,HDMI CEC,I2S STM32F2 ARM Cortex-M3 1.7至3.6 120 128k到1M 高达128 加密,2×12位DAC,以太网,摄像头,FSMC STM32F3 ARM Cortex-M4 1.8 / 2.0到3.6 72 32k到512k 16至80岁 SPFPU,16位ADC,12位DAC,比较器,运算放大器,高级TIM,高分频定时器 STM32F4 ARM Cortex-M4 1.7至3.6 84到180 64k到1.5M 32至384 SPFPU,以太网,CAN,摄像头,双四SPI,SPDIF,SAI,Chrom-ART,TFT LCD控制器,MIPI DSI STM32F7 ARM Cortex-M7 1.7至3.6 216 256k到2M 256到512 DP / SPFPU,L1缓存,JPEG编解码器,CAN,DFSDM,TFT LCD,MIPI DSI STM32Lx系列
L-line更加注重低功耗:每个STM32Lx都具有动态电压调节功能,特殊的低功耗时钟源,高级RTC。
亚家族 建筑 电压(V) FCPU(MHz) Flash(字节) RAM(kB) 特殊外围设备 STM32L0 ARM Cortex-M0 + 1.65至3.6 32 高达64k 8 AES 128位,LP UART,LP定时器,12位DAC,触摸感应,TRNG,无晶体USB段式LCD驱动器 STM32L1 ARM Cortex-M3 1.65至3.6 32 32k到512k 4到80岁 12位DAC,运算放大器,比较器,电容式触摸,段式LCD驱动器,AES 128位 STM32L4 ARM Cortex-M4 1.7至3.6 80 128k到1M 64至320 SAI,SAI,Chrom-ART,AES 128/256位,段式LCD驱动器,USB 2.0 OTG FS,12位DAC,电容式触摸 这些MCU可以在不同模式下工作,这会影响电流消耗。
STM32L0的当前消耗参考值为:
- 动态运行模式:低至87μA/ MHz
- 超低功耗模式+全RAM +低功耗定时器:440 nA(16条唤醒线)
- 超低功耗模式+备份寄存器:250 nA(3个唤醒引脚)
- 唤醒时间:3.5μs
-
STM32L1的当前消耗参考值为:
- 超低功耗模式:280 nA,带备用寄存器(3个唤醒引脚)
- 超低功耗模式+ RTC:900 nA,带备用寄存器(3个唤醒引脚)
- 低功耗运行模式:低至9μA
- 动态运行模式:低至177μA/ MHz
-
STM32L4的当前消耗参考值为:
- 超低功耗模式:8 nA,备用寄存器,无实时时钟(5个唤醒引脚)
- 超低功耗模式+ RTC:200 nA,带备用寄存器(5个唤醒引脚)
- 超低功耗模式+ 16 KB RAM:200 nA
- 超低功耗模式+ 16 KB RAM + RTC:450 nA
- 动态运行模式:低至36μA/ MHz
- 唤醒时间:5μs
-
STM32Hx系列
该子系列是新一代高性能微控制器系列。据了解,该子系列是ARM Cortex-M7 MCU,时钟频率高达400MHz。所有STM32H均配备USB 2.0 OTG FS / HS,SDMMC,USART,SPI,I2C,HDMI-CEC,比较器,运算放大器,I2S,SAI,12位DAC,SPDIF-RX,LCD TFT控制器,Chrom- ART,加密选项,TRNG,DFSDM,16/32位定时器和最高2 Msps的14位ADC。
亚家族 建筑 电压(V) FCPU(MHz) Flash(字节) RAM(字节) 空间外围设备 STM32H7 ARM Cortex-M7 1.7至3.6 400 2M双银行 1M 双精度FPU,双Quad-SPI,以太网,摄像头 个人笔记,比较,误解
看看前面的表格,我们应该清楚地知道时钟频率,RAM和闪存大小的范围。在我的嵌入式世界之旅中,我经常听说STM32和Arduino或Arduino和Raspberry之间的比较等等。本段旨在回答一些常见问题,并指出误解。
STM32还是Arduino哪个更好?
这个问题没有任何意义。这个问题听起来像“Intel i7或HP Compaq,哪个更好?”STM32是一个微控制器,Arduino是一系列开源开发板,而且,Arduino STAR Otto配备了STM32F469。
尝试解码这个非常常见的问题,通常处理Arduino的人使用Arduino Uno或Arduino Mega,因为很容易找到准备使用这些开发板的库。Arduino UNO搭载了一款ATmega328P,它是Microchip(之前的Atmel)的8位AVR MCU,时钟速度高达20 MHz,闪存为32kB,RAM为2kB。那么,就性能而言,当然最好选择提供更高MIPS(每秒百万条指令)的STM32 ,更大的外设和VLSI芯片组。另一方面,没有任何电子知识的初学者通常更喜欢使用易于使用的Arduino,这要归功于黑盒子范例:Arduino API通常倾向于向用户隐藏问题以换取缺乏性能和/或多功能性。
我个人认为,这是帮助业余爱好者 或年轻人接近嵌入式系统的好方法,但对于应该解决和解决问题的工程师或专业人员来说,这不是一个好的解决方案。
必须要做的另一个考虑因素是表演不是最重要的事情。在某些应用中,小型微控制器足以完成您必须做的事情:在这些情况下,我们应该考虑开发产品所需的时间或MCU本身的价格,甚至是整个系统的功耗。例如,如果应用程序是一个小型传感器节点,每天必须获取一次环境信息并且由小型电池供电,则必须考虑低功耗MCU。
STM32还是Raspberry Pi?
同样,这个问题没有任何意义。STM32是一个微控制器,Raspberry Pi是一系列应用开发板。更多的Raspberry Pi主板有不同的目标:应用程序!Raspberry Pi 3配备了Broadcom BCM2837,这是一款四核1.2GHz 64位ARM Cortex-A53。将Cortex-A与Cortex-M进行比较以及将8位与32位微控制器进行比较是不寻常的。
Cortex-A通常运行Linux或其他复杂的操作系统,不是特别针对实时应用程序,而是通常用于驱动LCD并执行图形或数据过滤所需的大量操作。Cortex-M通常运行RTOS(实时操作系统),面向硬件并创建实时解决方案。
总结选择取决于最终的应用。请注意,我们经常提到“实时”一词:我们将在下面的教程中指出这意味着什么。
有很多基于ARM Cortex-M的MCU:为什么选择STM32?
我在2013年开始使用微控制器,而不是你常说的极客。我从STM32F3开始,经过一些初步的困难,几个月后我就可以在日常应用中使用它了。一年后,我非常热衷于这个新工具,我开始制作关于这个论点的视频和教程。但我是一个好奇的家伙,所以我开始探索其他选择:我有机会使用Arduino Uno,Arduino Mega,Arduino Due,Freescale MK20和MK64,Infineon XMC1100,Texas TIVA C TM4123G,STMicroelectronics SPC560D,几乎每个STM32(除了STM32H7,但是时间问题)和一些其他非MCU可编程器件。
好吧,我必须说(我个人的意见),STM32的文档是我见过的最准确的。我也喜欢STM32提供的内部外围设备:有趣的是外围设备通常不会在整个子系列中发生变化,并且某些子系列具有相同类型的外设。为了更好地解释这个,让我举个例子:SPI有两个版本。STM32F1,STM32F2,STM32F4,STM32L0和STM32L1的第一个版本STM32F0,STM32F3,STM32F7和STM32F7都有第二个版本。在其他品牌中,供应商重新设计了每个MCU上的外设。STM32外设的设计缩短了开发时间,特别是在我们需要将应用程序移植到另一个微控制器的情况下。
相反,我不是STM32软件开发工具的忠实粉丝所以我同情谁更喜欢更容易使用的解决方案。我们将在本文后面讨论软件开发工具,所以让我们暂停这一点。
开发设施
为了帮助开发人员开始使用STM32,意法半导体已开始生产和销售一些开发套件。当我开始使用STM32开发时,有五到四个开发套件:时代变化,今天有很多开发板。
这个硬件的亮点是:
- 开发板非常便宜(通常10美元或20美元,如果复杂的显示器或类似的板子高达70美元);
- 每块板都有一个嵌入式片上调试器;
- 有很多官方和非官方资源(PLAY Embedded是非官方资源的一个例子);
- 由于这个开发板,STM32社区正在发展。
-
官方开发套件
通常,谁想要创建一个优秀的嵌入式产品,就会创建自己的电路板,为其配备一个或多个MCU,外部外设和所有必需的电路。这些定制板通常设计为封闭在一个漂亮的容器中。此过程通常需要一些中间步骤:
- 从最初的想法开始创建一系列要求;
- 从这些要求开始设计硬件;
- 创建绘制印刷电路板(PCB)的示意图并生成少量原型;
- 开始为板载MCU开发固件
- 执行一些测试以确保硬件设计符合最终要求;
- 如果产品与要求不匹配,或者我们固件开发已经显示设计泄漏,请返回第2点; 如果必须更改要求和想法,请返回第1点。重复循环,直到产品达到预期质量
-
这种循环称为产品工程,需要不可忽视的时间和金钱。我们将要介绍的开发套件的目的是减少原型设计的时间。这可以通过提供与产品的最终版本非常相似的通用硬件来实现:以这种方式,可以在开始PCB生产之前具有原型并且(可能)发现设计泄漏之前开发固件。
STM32板可分为两大类:STM32 Discovery套件和STM32 Nucleo。STM32也用于其他评估套件,称为ST评估板:我们不会在本文中讨论它们。
STM32发现套件
的STM32发现试剂盒的开发板通常是绿色色,其被设计为覆盖因而配备有等微机电系统,显示器,特殊连接器等附加设备的特定应用领域。例如, STM32F3 Discovery是一个开发板,其板载有 STM32F303和LGD320,它是一个3轴陀螺仪和LIS303DLHC,它是一个3轴磁力计和3轴加速度计。 STM32F7 Discovery具有显示器,以太网插头,摄像头扩展器,麦克风,操纵杆和SD卡读卡器。
有十几个发现工具包,所有这些工具包都配备了ST-Link on chip调试器,在开发代码时非常有用。
STM32 Nucleo
STM32 Nucleo 是我们将要解释的基于抽象概念的开发板。STM32 Nucleo有三个主线:
- STM32 Nucleo-32配备Arduino Nano连接器;
- STM32 Nucleo-64配备Arduino Uno Rev-3连接器和一个名为ST Morpho的专用连接器;
- STM32 Nucleo-144配备了Arduino Uno Rev-3连接器和一个名为ST Zio的专用连接器。
-
STM32 Nucleo还可以扩展堆叠STM32 Nucleo扩展板 (也称为x-Nucleo)。这些板是基于Arduino Uno Rev3连接器的外部PCB,并配备了MEMS,低功耗蓝牙,Wi-Fi等外部设备。
文档
我们生活在用户友好的电子产品时代:我们可以设置和使用电子设备而无需阅读任何说明书。新手常常认为编程嵌入式系统同样简单。
您可以处理嵌入式系统的最大错误是将信息视为理所当然。处理嵌入式系统是逻辑问题:做错误的断言会使整个推理失效,并且最终结果认为不会起作用或者会以意想不到的方式工作。
有许多信息来源,但最重要的是MCU的官方文档。这些文档通常按参数组织并报告处理硬件所需的所有信息:在我们开发之前和期间关注它们始终是一个好主意。
处理STM32需要两个(加一个)文档:参考手册,数据表,如果我们使用官方开发工具包,则需要用户手册。这些文件通常可能非常大。我们不必全部阅读,但我们将学习如何搜索它以获取所需信息。
请在打印前考虑环境。
参考手册
该文档也简称为RM,包含有关MCU核心和外设的所有信息。这包括有关寄存器及其在内存中的映射方式的信息,有关如何启用某个外设以及如何配置它的信息,还包括必须复制代码的位置以及如何启动计算机。
一开始,每个子科只有一本参考手册。所以,有STM32F0 RM,STM32F1 RM,STM32F2 RM等等。不断发展,STM32子系列开始在同一子系列中创建功能差异:例如,原始STM32F407的时钟频率高达180 MHz,而较新的 STM32F401的时钟频率高达84 MHz。这意味着不同的时钟树,因此不同的RM。通常,RM指的是属于同一子系列的大量MCU。
要找到适合您的MCU的RM,请访问ST网站, 并在搜索框中写下您的MCU部件号。例如,STM32 Nucleo-64 F401RE配备了STM32F401RE,因此我们必须搜索STM32F401RE。在搜索结果中,我们将看到一个包含我们刚刚查找的部件号的框以及该项的说明。点击它我们将到达 产品页面 ,其中包含有关该产品的信息以及许多技术文档:RM在列表中。
总结:
参考手册是一份大文档(数百或数千页),描述了MCU的核心和外设。如果您需要了解存储器或寄存器的组织方式或外设如何工作,这是正确的文档。
RM通常与MCU的子系列或其大型子集相关:您应该期望该文档在更多MCU之间共享。
数据表
数据表(也简称为DS)包含MCU的所有电气和机械信息,如绝对最大额定值,焊接信息,可用封装,闪存和RAM大小,核心频率和引脚图。
数据表比RM更具体,实际上每个MCU都有一个。无论如何,即使MCU在不同的封装中提供或具有不同的闪存/ RAM大小,它也完全由单个DS描述。例如,STM32F401RE和STM32F401CE类似,但封装除外:第一个是LQFP 64,第二个是 UFQFPN 48,但它们由相同的DS描述。实际上,相同的数据表也适合具有不同内存大小的STM32F401xD。
找到正确DS的方法实际上与RM相同。搜索您的MCU,在 产品页面 上会出现一个图标,上面写着“下载数据表”(它位于产品名称下方的顶部)。这个文件比RM短,但我再次要求你不要打印它:这是没用的,因为这些文件经常被审查(你可以看到ST文件页面底部的修订号)。
总结:
数据表是一个较短的文档(与RM相比),报告有关特定MCU的所有机械和电气信息。如果您需要了解如何焊接STM32或有多少安培/伏特能够提供IO引脚,这是正确的文档。
DS通常是与特定MCU相关的文档。
用户手册
我们需要的最后一个文档是用户手册,通常缩写为UM。本文档与开发板有关。ST为每个开发板提供UM,其中包含有关PCB的信息(包括原理图)和有关板载组件的其他信息。
如果我们需要搜索它,我们需要寻找电路板:例如,如果我们使用STM32F3发现,我们必须搜索“STM32 Discovery”而不是“STM32F3”,因为上次搜索将返回有关MCU的结果而不是开发套件。在产品页面的技术文档中,可能不仅仅是UM:下载描述硬件的UM而不是“入门......”
总结:
用户手册是一个选项文档,包含有关开发板PCB的信息。如果您需要了解如何将LED或按钮连接到MCU,这是正确的文档。
UM是与特定开发板严格相关的文档。
驱动程序
STM32开发板带有一个嵌入式片上调试器,我们将在下一篇文章中使用它们进行开发。要使用它,我们需要安装相关的驱动程序。驱动程序可以单独使用,也可以附加到名为STM32 ST-Link Utility的非常有用的工具上。转到产品页面并下载此软件。这将需要注册st.com。
安装完毕后,连接开发板并假设您使用的是Windows,在设备管理器中,您将看到USB串行总线设备下的新条目是STLink Dongle。
如果没有发生这种情况,请重新安装程序强制管理权限或评论本文:也许我们可以帮助您。
此任务所需的步骤是:
- 在Google上搜索“ST Link Utility”;
- 从st.com中选择结果;
- 选择获取软件,接受EULA并登录/注册到MyST;
- 下载并安装软件;
- 连接你的开发板;
- 打开设备管理器以检查驱动程序是否已正确安装。
-
为了让思考更清晰,让我们来看看下一个短视频。
使用STM32进行开发
使用STM32可以开发许多工具和嵌入式库。ST的官方解决方案是STM32Cube。另一种流行的解决方案是ARM mbed对于那些开发套件这是 ARM mbed启用。还有其他开源替代方案可以用STM32开发,包括ChibiOS,这显然是我们将要使用的。
STM32Cube
这是ST开发的一个嵌入式库,旨在减少“简化开发人员的生活,减少开发工作”。它包含演示,HAL,库,中间件和随时可用的演示。
让我列出一些PRO和CON。请考虑其中一些是基于我的个人经验,而不是一个事实:在阅读之前要注意这一点。
优点
- 开源并免费使用;
- 它支持硬件的每个特定功能;
- 它附带一个名为STM32CubeMX的图形配置器,它对配置MCU非常有帮助。
- 它还包括对显示器,MEMS等外部设备的支持;
- 代码得到积极维护;
- 有一个非常大的社区使用它。
- 是官方嵌入式库:如果您想参加STM32官方社区并需要帮助,您应该使用它
-
缺点
- 每个子家族都有一个不同的STM32Cube库:这意味着不容易迁移子系列。每个包甚至更多都是几百MB;
- ST没有提供随时可用的IDE,但建议使用一些第三方IDE,其中大多数都是开源的;
- HAL不够通用,不会隐藏与用户无关的细节,例如启动机器主要有很多代码行;
- 样式不一致,每个函数都有很多代码模式。
-
ARM mbed
这是一个集成的在线工具链,使您可以轻松地开始使用标记为ARM mbed Enabled的所有电路板,这对于大多数STM32开发板来说都是如此。
优点
- 开源并免费使用;
- 非常易于使用,并具有在线IDE;
- 大多数STM32扩展板也有代码;
- 可以为不同的MCU编译相同的代码。
-
缺点
- 当您连接到互联网时,您必须在浏览器中编译代码;
- 有时在线IDE很慢,这也取决于用户连接;
- 代码并不总是保持不变;
- 无法使用调试功能;
- 风格很不协调;
- 隐藏了很多细节,这常常导致用户误以为易于掌握。
-
ChibiOS
这是一个第三方开源和免费使用的解决方案,它带有一个随时可用的Windows for Windows和许多演示。在业余时间,我参与了ChibiOS(STM32部分)的开发,因为我喜欢这个项目背后的理念和对细节的关注。但我不会欺骗你:即使我们试图删除它们,这里也有缺点。
优点
- 开源和免费使用:它还包括免费的商业许可证;
- 配备了非常高效的RTOS和HAL以及随时可用的IDE。
- 代码灵活而优雅;
- 几乎每个STM32都受支持,非STM32 MCU也有社区支持
- 可以为不同的MCU编译相同的代码。
- 代码得到积极维护;
- 有一个大型社区使用它。
-
缺点
- 即用型IDE不是那么用户友好;
- 每个x-Nucleo都不支持;
- 并非所有MCU的特定功能都受支持;
- 免费支持完全是自愿的;
- 文档面向专业,而不是特别针对初学者。
-
结论性说明
在下一篇文章中,我们将提供STM32 Nucleo-64 F401RE和STM32 Discovery F3 Revision C的代码示例 。我们的想法是为两个不同的MCU提供代码示例,以指出代码方面的所有差异,并帮助读者理解如何编写易于在两个不同MCU之间移植的代码。
两块板都配有STLink V2-1(此信息在机箱和UM中)。因此,在继续下一篇文章之前,需要:
- 下载与您将要使用的开发板和MCU相关的文档;
- 安装 STM32 ST-Link Utility 并验证驱动程序是否已正确安装。
-
数字(32,64和144)表示板载MCU的PIN数。有趣的是,每个Nucleo都与属于同一行的其他Nucleo板兼容。因此,例如STM32 Nucleo-64 F401RE引脚兼容STM32 Nucleo-64 F303RE,STM32 Nucleo-64 L476RG等。Nucleo-32和Nucleo-144也是如此。这是可能的,因为STM32 Nucleo板上配备的所有MCU都是彼此PIN兼容的,实际上每个Nucleo板的PCB实际上都是相同的,无论配备哪个MCU:使用一些PCB焊桥解决了最小的差异。
每个Nucleo(甚至Nucleo-32)都配备了嵌入式ST-Link V2-1,并且是ARM mbed Enabled。Nucleo-32和Nucleo-64的价格约为10美元,Nucleo-144的价格约为20美元。
-
数字(32,64和144)表示板载MCU的PIN数。有趣的是,每个Nucleo都与属于同一行的其他Nucleo板兼容。因此,例如STM32 Nucleo-64 F401RE引脚兼容STM32 Nucleo-64 F303RE,STM32 Nucleo-64 L476RG等。Nucleo-32和Nucleo-144也是如此。这是可能的,因为STM32 Nucleo板上配备的所有MCU都是彼此PIN兼容的,实际上每个Nucleo板的PCB实际上都是相同的,无论配备哪个MCU:使用一些PCB焊桥解决了最小的差异。
每个Nucleo(甚至Nucleo-32)都配备了嵌入式ST-Link V2-1,并且是ARM mbed Enabled。Nucleo-32和Nucleo-64的价格约为10美元,Nucleo-144的价格约为20美元。
ARM?
如果这不是您第一次阅读嵌入式系统,那么您肯定听说过ARM或ARM Cortex。关于这一点经常会有一些混乱,所以我们将花费很少的话来解决这个问题。
最初代表Acorn RISC Machine的ARM是精简指令集计算机(RISC)机器的架构名称。体系结构是“描述计算机系统的功能,组织和实现的一组规则和方法”,而计算机芯片是体系结构的物理实现。Acorn RISC机器也是如此:计算机的架构。ARM本身在设计和功耗方面非常有趣,这个想法背后的人们开始实现更多的架构,而ARM成为了一个品牌。
如今,ARM设计的架构主要用于我们日常使用的大部分产品中。
ARM本身不生产芯片。它设计销售许可证以使用其知识产权的架构。许多半导体公司购买此许可证以生产自己的芯片。
STMicroelectronics的STM32是一个基于ARM架构的芯片的例子,但是由ST的半导体公司生产。ST不是唯一一个这样的人:高通,Apple,德州仪器,Microchip,英飞凌和许多其他公司都使用ARM架构。
皮质:M,A和R.
ARM主要有三种有趣的架构,它们是常用的并且众所周知:
- ARM Cortex-M
- ARM Cortex-A
- ARM Cortex-R
Cortex-M的
该架构旨在拥有体积最小,功耗最低的Cortex处理器。这种处理器针对确定性和实时嵌入式处理进行了优化:因此,在这种情况下,M代表微控制器。
我们谈论的是32位MCU,时钟频率范围为24-400兆赫兹,嵌入式闪存高达几兆字节,嵌入式系统高达数百千字节。Cortex-M是一系列架构的名称,包括M0,M0 +,M3,M4,M7,现在还包括M23和M33。
ARM Cortex-M架构适用于所有需要处理硬件并面向低功耗的应用。
的Cortex-A
该架构旨在达到最高性能水平。这种处理器针对应用进行了优化:因此,在这种情况下,A代表应用程序。
我们谈论的是64/32位应用核心,时钟频率为千兆赫兹,它没有嵌入闪存或RAM。Cortex-A是一系列架构的名称,包括A5,A7,A32,A35,A8,A9,A53,A55,A15,A17,A57,A72,A73和A75。
Cortex-A系列处理器已经开发用于运行一些架构扩展,如TrustZone,big.LITTLE和浮点架构。
的Cortex-R
该架构专为硬实时应用而设计。这种处理器为嵌入式系统提供高性能计算解决方案,其中需要可靠性,高可用性,容错性和/或确定性实时响应:在这种情况下,实时R链
通常,Cortex-R是一个MCU,其中两个内核执行相同的代码,外部单元逐步检查两个芯片之间的一致性。此模式称为Lockstep。
Cortex-R是一系列架构的名称,包括R4,R5,R7,R7和R52。
介绍STM32
STM32F042x4 / x6的内部图。
STM32是意法半导体的一系列基于ARM Cortex-M的32位微控制器。STM32分为子系列,每个子系列都基于特定的Cortex-M架构,并拥有自己的一组外设。随着数百种不同的MCU,STM32系列不断扩展,但问题是:为什么这么多不同的MCU呢?
答案很简单:每个MCU在闪存和RAM存储器,时钟频率,引脚号和芯片封装方面都有不同的尺寸。更重要的是,每个芯片具有不同的外围设备和不同的数量。该策略提供了选择非常接近用户需求的MCU的机会。
亚科
STM32 MCU的名称由字母和数字组成 ,形式为STM32 XNMMOO,而X是字母,NMM是三个数字,OO是两个字母。例如,我们有STM32 F303VC,STM32 L476ZG,STM3 2F401RE,STM32 F407VG等。亚家族由X和N识别,因此在我们的例子中,亚家族是F3,L4,F4和(再次)F4。
可以做的第一个大的区别是与X字母有关。目前我们有三条线:F线,L线和H线。
- 在F-线 是第一个系列STM32微控制器的。目前它分为6 个子系列STM32F0,STM32F1,STM32F2,STM32F3,STM32F4和STM32F7。
- 的L-线是低功率系列STM32的MCU。目前它分为三个子系列STM32L0,STM32L1 和STM32L4。
- 该H-线 已经被新引入的,是一个非常高的表演系列32位MCU。目前它仅包括STM32H7亚家族。
每个STM32都提供大量外设,所有外设都提供完整的可配置时钟树,内置PLL,多通道DMA,定时器,串行线调试,ADC,USART,SPI,I2C和RTC。每个微控制器之间的区别在于这些外设的数量和特性。例如,面向低功耗的STM32L4具有特殊的低功耗定时器以及具有低功耗的多速内部PLL的MSI。相反,STM32F3有一个特殊的定时器,它提供多达六个通道及其否定:这种定时器面向全桥控制。此外,STM32F373配备了16位ADC Sigma Delta,而STM32通常提供12位ADC。
另一个区别是特定外设的数量,例如某些STM32具有更多的独立定时器或USART。因此,选择合适的STM32肯定取决于应用程序。
当然,每个子系列在时钟速度,RAM和闪存大小方面也提供不同的性能。每个子系列通常都有一些特定的外围设备,使其独一无二。下表是对子族之间主要差异的非详尽总结。
STM32Fx系列
F-line在性能和外设方面提供广泛的解决方案。
亚家族 | 建筑 | 电压(V) | FCPU(MHz) | Flash(字节) | RAM(kB) | 特殊外围设备 |
STM32F0 | ARM Cortex-M0 | 1.8 / 2.0到3.6 | 48 | 16k到256k | 4到32岁 | 12位DAC,CAN,CEC,无晶体USB,触摸感应 |
---|---|---|---|---|---|---|
STM32F1 | ARM Cortex-M3 | 2.0至3.6 | 24至72岁 | 16k到1M | 4到96 | USB 2.0 FS / OTG,CAN 2.0B,FSCM,3相定时器,SDIO,以太网,HDMI CEC,I2S |
STM32F2 | ARM Cortex-M3 | 1.7至3.6 | 120 | 128k到1M | 高达128 | 加密,2×12位DAC,以太网,摄像头,FSMC |
STM32F3 | ARM Cortex-M4 | 1.8 / 2.0到3.6 | 72 | 32k到512k | 16至80岁 | SPFPU,16位ADC,12位DAC,比较器,运算放大器,高级TIM,高分频定时器 |
STM32F4 | ARM Cortex-M4 | 1.7至3.6 | 84到180 | 64k到1.5M | 32至384 | SPFPU,以太网,CAN,摄像头,双四SPI,SPDIF,SAI,Chrom-ART,TFT LCD控制器,MIPI DSI |
STM32F7 | ARM Cortex-M7 | 1.7至3.6 | 216 | 256k到2M | 256到512 | DP / SPFPU,L1缓存,JPEG编解码器,CAN,DFSDM,TFT LCD,MIPI DSI |
STM32Lx系列
L-line更加注重低功耗:每个STM32Lx都具有动态电压调节功能,特殊的低功耗时钟源,高级RTC。
亚家族 | 建筑 | 电压(V) | FCPU(MHz) | Flash(字节) | RAM(kB) | 特殊外围设备 |
STM32L0 | ARM Cortex-M0 + | 1.65至3.6 | 32 | 高达64k | 8 | AES 128位,LP UART,LP定时器,12位DAC,触摸感应,TRNG,无晶体USB段式LCD驱动器 |
---|---|---|---|---|---|---|
STM32L1 | ARM Cortex-M3 | 1.65至3.6 | 32 | 32k到512k | 4到80岁 | 12位DAC,运算放大器,比较器,电容式触摸,段式LCD驱动器,AES 128位 |
STM32L4 | ARM Cortex-M4 | 1.7至3.6 | 80 | 128k到1M | 64至320 | SAI,SAI,Chrom-ART,AES 128/256位,段式LCD驱动器,USB 2.0 OTG FS,12位DAC,电容式触摸 |
这些MCU可以在不同模式下工作,这会影响电流消耗。
STM32L0的当前消耗参考值为:
- 动态运行模式:低至87μA/ MHz
- 超低功耗模式+全RAM +低功耗定时器:440 nA(16条唤醒线)
- 超低功耗模式+备份寄存器:250 nA(3个唤醒引脚)
- 唤醒时间:3.5μs
STM32L1的当前消耗参考值为:
- 超低功耗模式:280 nA,带备用寄存器(3个唤醒引脚)
- 超低功耗模式+ RTC:900 nA,带备用寄存器(3个唤醒引脚)
- 低功耗运行模式:低至9μA
- 动态运行模式:低至177μA/ MHz
STM32L4的当前消耗参考值为:
- 超低功耗模式:8 nA,备用寄存器,无实时时钟(5个唤醒引脚)
- 超低功耗模式+ RTC:200 nA,带备用寄存器(5个唤醒引脚)
- 超低功耗模式+ 16 KB RAM:200 nA
- 超低功耗模式+ 16 KB RAM + RTC:450 nA
- 动态运行模式:低至36μA/ MHz
- 唤醒时间:5μs
STM32Hx系列
该子系列是新一代高性能微控制器系列。据了解,该子系列是ARM Cortex-M7 MCU,时钟频率高达400MHz。所有STM32H均配备USB 2.0 OTG FS / HS,SDMMC,USART,SPI,I2C,HDMI-CEC,比较器,运算放大器,I2S,SAI,12位DAC,SPDIF-RX,LCD TFT控制器,Chrom- ART,加密选项,TRNG,DFSDM,16/32位定时器和最高2 Msps的14位ADC。
亚家族 | 建筑 | 电压(V) | FCPU(MHz) | Flash(字节) | RAM(字节) | 空间外围设备 |
STM32H7 | ARM Cortex-M7 | 1.7至3.6 | 400 | 2M双银行 | 1M | 双精度FPU,双Quad-SPI,以太网,摄像头 |
---|
个人笔记,比较,误解
看看前面的表格,我们应该清楚地知道时钟频率,RAM和闪存大小的范围。在我的嵌入式世界之旅中,我经常听说STM32和Arduino或Arduino和Raspberry之间的比较等等。本段旨在回答一些常见问题,并指出误解。
STM32还是Arduino哪个更好?
这个问题没有任何意义。这个问题听起来像“Intel i7或HP Compaq,哪个更好?”STM32是一个微控制器,Arduino是一系列开源开发板,而且,Arduino STAR Otto配备了STM32F469。
尝试解码这个非常常见的问题,通常处理Arduino的人使用Arduino Uno或Arduino Mega,因为很容易找到准备使用这些开发板的库。Arduino UNO搭载了一款ATmega328P,它是Microchip(之前的Atmel)的8位AVR MCU,时钟速度高达20 MHz,闪存为32kB,RAM为2kB。那么,就性能而言,当然最好选择提供更高MIPS(每秒百万条指令)的STM32 ,更大的外设和VLSI芯片组。另一方面,没有任何电子知识的初学者通常更喜欢使用易于使用的Arduino,这要归功于黑盒子范例:Arduino API通常倾向于向用户隐藏问题以换取缺乏性能和/或多功能性。
我个人认为,这是帮助业余爱好者 或年轻人接近嵌入式系统的好方法,但对于应该解决和解决问题的工程师或专业人员来说,这不是一个好的解决方案。
必须要做的另一个考虑因素是表演不是最重要的事情。在某些应用中,小型微控制器足以完成您必须做的事情:在这些情况下,我们应该考虑开发产品所需的时间或MCU本身的价格,甚至是整个系统的功耗。例如,如果应用程序是一个小型传感器节点,每天必须获取一次环境信息并且由小型电池供电,则必须考虑低功耗MCU。
STM32还是Raspberry Pi?
同样,这个问题没有任何意义。STM32是一个微控制器,Raspberry Pi是一系列应用开发板。更多的Raspberry Pi主板有不同的目标:应用程序!Raspberry Pi 3配备了Broadcom BCM2837,这是一款四核1.2GHz 64位ARM Cortex-A53。将Cortex-A与Cortex-M进行比较以及将8位与32位微控制器进行比较是不寻常的。
Cortex-A通常运行Linux或其他复杂的操作系统,不是特别针对实时应用程序,而是通常用于驱动LCD并执行图形或数据过滤所需的大量操作。Cortex-M通常运行RTOS(实时操作系统),面向硬件并创建实时解决方案。
总结选择取决于最终的应用。请注意,我们经常提到“实时”一词:我们将在下面的教程中指出这意味着什么。
有很多基于ARM Cortex-M的MCU:为什么选择STM32?
我在2013年开始使用微控制器,而不是你常说的极客。我从STM32F3开始,经过一些初步的困难,几个月后我就可以在日常应用中使用它了。一年后,我非常热衷于这个新工具,我开始制作关于这个论点的视频和教程。但我是一个好奇的家伙,所以我开始探索其他选择:我有机会使用Arduino Uno,Arduino Mega,Arduino Due,Freescale MK20和MK64,Infineon XMC1100,Texas TIVA C TM4123G,STMicroelectronics SPC560D,几乎每个STM32(除了STM32H7,但是时间问题)和一些其他非MCU可编程器件。
好吧,我必须说(我个人的意见),STM32的文档是我见过的最准确的。我也喜欢STM32提供的内部外围设备:有趣的是外围设备通常不会在整个子系列中发生变化,并且某些子系列具有相同类型的外设。为了更好地解释这个,让我举个例子:SPI有两个版本。STM32F1,STM32F2,STM32F4,STM32L0和STM32L1的第一个版本STM32F0,STM32F3,STM32F7和STM32F7都有第二个版本。在其他品牌中,供应商重新设计了每个MCU上的外设。STM32外设的设计缩短了开发时间,特别是在我们需要将应用程序移植到另一个微控制器的情况下。
相反,我不是STM32软件开发工具的忠实粉丝所以我同情谁更喜欢更容易使用的解决方案。我们将在本文后面讨论软件开发工具,所以让我们暂停这一点。
开发设施
为了帮助开发人员开始使用STM32,意法半导体已开始生产和销售一些开发套件。当我开始使用STM32开发时,有五到四个开发套件:时代变化,今天有很多开发板。
这个硬件的亮点是:
- 开发板非常便宜(通常10美元或20美元,如果复杂的显示器或类似的板子高达70美元);
- 每块板都有一个嵌入式片上调试器;
- 有很多官方和非官方资源(PLAY Embedded是非官方资源的一个例子);
- 由于这个开发板,STM32社区正在发展。
官方开发套件
通常,谁想要创建一个优秀的嵌入式产品,就会创建自己的电路板,为其配备一个或多个MCU,外部外设和所有必需的电路。这些定制板通常设计为封闭在一个漂亮的容器中。此过程通常需要一些中间步骤:
- 从最初的想法开始创建一系列要求;
- 从这些要求开始设计硬件;
- 创建绘制印刷电路板(PCB)的示意图并生成少量原型;
- 开始为板载MCU开发固件
- 执行一些测试以确保硬件设计符合最终要求;
- 如果产品与要求不匹配,或者我们固件开发已经显示设计泄漏,请返回第2点; 如果必须更改要求和想法,请返回第1点。重复循环,直到产品达到预期质量
这种循环称为产品工程,需要不可忽视的时间和金钱。我们将要介绍的开发套件的目的是减少原型设计的时间。这可以通过提供与产品的最终版本非常相似的通用硬件来实现:以这种方式,可以在开始PCB生产之前具有原型并且(可能)发现设计泄漏之前开发固件。
STM32板可分为两大类:STM32 Discovery套件和STM32 Nucleo。STM32也用于其他评估套件,称为ST评估板:我们不会在本文中讨论它们。
STM32发现套件
STM32F3 Discovery的特写镜头
的STM32发现试剂盒的开发板通常是绿色色,其被设计为覆盖因而配备有等微机电系统,显示器,特殊连接器等附加设备的特定应用领域。例如, STM32F3 Discovery是一个开发板,其板载有 STM32F303和LGD320,它是一个3轴陀螺仪和LIS303DLHC,它是一个3轴磁力计和3轴加速度计。 STM32F7 Discovery具有显示器,以太网插头,摄像头扩展器,麦克风,操纵杆和SD卡读卡器。
有十几个发现工具包,所有这些工具包都配备了ST-Link on chip调试器,在开发代码时非常有用。
STM32 Nucleo
STM32 Nucleo 是我们将要解释的基于抽象概念的开发板。STM32 Nucleo有三个主线:
- STM32 Nucleo-32配备Arduino Nano连接器;
- STM32 Nucleo-64配备Arduino Uno Rev-3连接器和一个名为ST Morpho的专用连接器;
- STM32 Nucleo-144配备了Arduino Uno Rev-3连接器和一个名为ST Zio的专用连接器。
特写镜头的STM32 Nucleo-64
数字(32,64和144)表示板载MCU的PIN数。有趣的是,每个Nucleo都与属于同一行的其他Nucleo板兼容。因此,例如STM32 Nucleo-64 F401RE引脚兼容STM32 Nucleo-64 F303RE,STM32 Nucleo-64 L476RG等。Nucleo-32和Nucleo-144也是如此。这是可能的,因为STM32 Nucleo板上配备的所有MCU都是彼此PIN兼容的,实际上每个Nucleo板的PCB实际上都是相同的,无论配备哪个MCU:使用一些PCB焊桥解决了最小的差异。
每个Nucleo(甚至Nucleo-32)都配备了嵌入式ST-Link V2-1,并且是ARM mbed Enabled。Nucleo-32和Nucleo-64的价格约为10美元,Nucleo-144的价格约为20美元。
STM32 Nucleo还可以扩展堆叠STM32 Nucleo扩展板 (也称为x-Nucleo)。这些板是基于Arduino Uno Rev3连接器的外部PCB,并配备了MEMS,低功耗蓝牙,Wi-Fi等外部设备。
文档
我们生活在用户友好的电子产品时代:我们可以设置和使用电子设备而无需阅读任何说明书。新手常常认为编程嵌入式系统同样简单。
您可以处理嵌入式系统的最大错误是将信息视为理所当然。处理嵌入式系统是逻辑问题:做错误的断言会使整个推理失效,并且最终结果认为不会起作用或者会以意想不到的方式工作。
有许多信息来源,但最重要的是MCU的官方文档。这些文档通常按参数组织并报告处理硬件所需的所有信息:在我们开发之前和期间关注它们始终是一个好主意。
处理STM32需要两个(加一个)文档:参考手册,数据表,如果我们使用官方开发工具包,则需要用户手册。这些文件通常可能非常大。我们不必全部阅读,但我们将学习如何搜索它以获取所需信息。
请在打印前考虑环境。
参考手册
该文档也简称为RM,包含有关MCU核心和外设的所有信息。这包括有关寄存器及其在内存中的映射方式的信息,有关如何启用某个外设以及如何配置它的信息,还包括必须复制代码的位置以及如何启动计算机。
一开始,每个子科只有一本参考手册。所以,有STM32F0 RM,STM32F1 RM,STM32F2 RM等等。不断发展,STM32子系列开始在同一子系列中创建功能差异:例如,原始STM32F407的时钟频率高达180 MHz,而较新的 STM32F401的时钟频率高达84 MHz。这意味着不同的时钟树,因此不同的RM。通常,RM指的是属于同一子系列的大量MCU。
要找到适合您的MCU的RM,请访问ST网站, 并在搜索框中写下您的MCU部件号。例如,STM32 Nucleo-64 F401RE配备了STM32F401RE,因此我们必须搜索STM32F401RE。在搜索结果中,我们将看到一个包含我们刚刚查找的部件号的框以及该项的说明。点击它我们将到达 产品页面 ,其中包含有关该产品的信息以及许多技术文档:RM在列表中。
如何查看st.com上的参考手册框
总结:
参考手册是一份大文档(数百或数千页),描述了MCU的核心和外设。如果您需要了解存储器或寄存器的组织方式或外设如何工作,这是正确的文档。
RM通常与MCU的子系列或其大型子集相关:您应该期望该文档在更多MCU之间共享。
数据表
数据表(也简称为DS)包含MCU的所有电气和机械信息,如绝对最大额定值,焊接信息,可用封装,闪存和RAM大小,核心频率和引脚图。
数据表比RM更具体,实际上每个MCU都有一个。无论如何,即使MCU在不同的封装中提供或具有不同的闪存/ RAM大小,它也完全由单个DS描述。例如,STM32F401RE和STM32F401CE类似,但封装除外:第一个是LQFP 64,第二个是 UFQFPN 48,但它们由相同的DS描述。实际上,相同的数据表也适合具有不同内存大小的STM32F401xD。
找到正确DS的方法实际上与RM相同。搜索您的MCU,在 产品页面 上会出现一个图标,上面写着“下载数据表”(它位于产品名称下方的顶部)。这个文件比RM短,但我再次要求你不要打印它:这是没用的,因为这些文件经常被审查(你可以看到ST文件页面底部的修订号)。
总结:
数据表是一个较短的文档(与RM相比),报告有关特定MCU的所有机械和电气信息。如果您需要了解如何焊接STM32或有多少安培/伏特能够提供IO引脚,这是正确的文档。
DS通常是与特定MCU相关的文档。
用户手册
我们需要的最后一个文档是用户手册,通常缩写为UM。本文档与开发板有关。ST为每个开发板提供UM,其中包含有关PCB的信息(包括原理图)和有关板载组件的其他信息。
如果我们需要搜索它,我们需要寻找电路板:例如,如果我们使用STM32F3发现,我们必须搜索“STM32 Discovery”而不是“STM32F3”,因为上次搜索将返回有关MCU的结果而不是开发套件。在产品页面的技术文档中,可能不仅仅是UM:下载描述硬件的UM而不是“入门......”
总结:
用户手册是一个选项文档,包含有关开发板PCB的信息。如果您需要了解如何将LED或按钮连接到MCU,这是正确的文档。
UM是与特定开发板严格相关的文档。
驱动程序
如何在设备管理器中显示正确安装的STLink
STM32开发板带有一个嵌入式片上调试器,我们将在下一篇文章中使用它们进行开发。要使用它,我们需要安装相关的驱动程序。驱动程序可以单独使用,也可以附加到名为STM32 ST-Link Utility的非常有用的工具上。转到产品页面并下载此软件。这将需要注册st.com。
安装完毕后,连接开发板并假设您使用的是Windows,在设备管理器中,您将看到USB串行总线设备下的新条目是STLink Dongle。
如果没有发生这种情况,请重新安装程序强制管理权限或评论本文:也许我们可以帮助您。
此任务所需的步骤是:
- 在Google上搜索“ST Link Utility”;
- 从st.com中选择结果;
- 选择获取软件,接受EULA并登录/注册到MyST;
- 下载并安装软件;
- 连接你的开发板;
- 打开设备管理器以检查驱动程序是否已正确安装。
为了让思考更清晰,让我们来看看下一个短视频。
使用STM32进行开发
使用STM32可以开发许多工具和嵌入式库。ST的官方解决方案是STM32Cube。另一种流行的解决方案是ARM mbed对于那些开发套件这是 ARM mbed启用。还有其他开源替代方案可以用STM32开发,包括ChibiOS,这显然是我们将要使用的。
STM32Cube
这是ST开发的一个嵌入式库,旨在减少“简化开发人员的生活,减少开发工作”。它包含演示,HAL,库,中间件和随时可用的演示。
让我列出一些PRO和CON。请考虑其中一些是基于我的个人经验,而不是一个事实:在阅读之前要注意这一点。
优点
- 开源并免费使用;
- 它支持硬件的每个特定功能;
- 它附带一个名为STM32CubeMX的图形配置器,它对配置MCU非常有帮助。
- 它还包括对显示器,MEMS等外部设备的支持;
- 代码得到积极维护;
- 有一个非常大的社区使用它。
- 是官方嵌入式库:如果您想参加STM32官方社区并需要帮助,您应该使用它
缺点
- 每个子家族都有一个不同的STM32Cube库:这意味着不容易迁移子系列。每个包甚至更多都是几百MB;
- ST没有提供随时可用的IDE,但建议使用一些第三方IDE,其中大多数都是开源的;
- HAL不够通用,不会隐藏与用户无关的细节,例如启动机器主要有很多代码行;
- 样式不一致,每个函数都有很多代码模式。
ARM mbed
这是一个集成的在线工具链,使您可以轻松地开始使用标记为ARM mbed Enabled的所有电路板,这对于大多数STM32开发板来说都是如此。
优点
- 开源并免费使用;
- 非常易于使用,并具有在线IDE;
- 大多数STM32扩展板也有代码;
- 可以为不同的MCU编译相同的代码。
缺点
- 当您连接到互联网时,您必须在浏览器中编译代码;
- 有时在线IDE很慢,这也取决于用户连接;
- 代码并不总是保持不变;
- 无法使用调试功能;
- 风格很不协调;
- 隐藏了很多细节,这常常导致用户误以为易于掌握。
ChibiOS
这是一个第三方开源和免费使用的解决方案,它带有一个随时可用的Windows for Windows和许多演示。在业余时间,我参与了ChibiOS(STM32部分)的开发,因为我喜欢这个项目背后的理念和对细节的关注。但我不会欺骗你:即使我们试图删除它们,这里也有缺点。
优点
- 开源和免费使用:它还包括免费的商业许可证;
- 配备了非常高效的RTOS和HAL以及随时可用的IDE。
- 代码灵活而优雅;
- 几乎每个STM32都受支持,非STM32 MCU也有社区支持
- 可以为不同的MCU编译相同的代码。
- 代码得到积极维护;
- 有一个大型社区使用它。
缺点
- 即用型IDE不是那么用户友好;
- 每个x-Nucleo都不支持;
- 并非所有MCU的特定功能都受支持;
- 免费支持完全是自愿的;
- 文档面向专业,而不是特别针对初学者。
结论性说明
在下一篇文章中,我们将提供STM32 Nucleo-64 F401RE和STM32 Discovery F3 Revision C的代码示例 。我们的想法是为两个不同的MCU提供代码示例,以指出代码方面的所有差异,并帮助读者理解如何编写易于在两个不同MCU之间移植的代码。
两块板都配有STLink V2-1(此信息在机箱和UM中)。因此,在继续下一篇文章之前,需要:
- 下载与您将要使用的开发板和MCU相关的文档;
- 安装 STM32 ST-Link Utility 并验证驱动程序是否已正确安装。
这篇关于ChibiOS系列:一、从0到STM32的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!