有朋友向我提问:“我之前学习过51单片机,接下来是先学习STM8还是STM32呢?”
引言
要弄清楚这个问题,实际上需要了解一下STM8和STM32之间的一些差异,包括MCU的基本信息、开发难度以及应用场景等等。
从客观的角度来看,相比之下,STM8的学习曲线比STM32要更容易一些。如果你具备一定的C语言基础,直接学习STM32也是可行的。
从更宏观的角度来看,当你对一种MCU的掌握较为深入之后,学习其他型号或其他厂家的MCU会相对容易得多。
针对这个问题,我将在下面进一步讲解相关的知识。
STM8和STM32内核差异
STM8™ MCU采用了一种专有架构,保留了以前的ST7内核的传统,并在8位MCU的效率和代码密度方面取得了突破性的进展。
STM32系列基于行业标准的ARM® Cortex™-M 32位内核,同时受益于与ARM处理器相关的丰富开发工具和软件解决方案。
尽管这两款MCU被认为是完全不同的处理器,但实际上它们在架构方面有许多相似之处。
接下来,我将对比一下STM8S和STM32F1(基于Cortex-M3)这两个内核的差异:
两种内核均基于哈佛架构,它们采用 3 级流水线执行,可将执行时间降至最低,对于 STM8S,时钟速度高达 24 MHz,对于 STM32F1系列,时钟速度高达 72 MHz。
在代码密度方面,它们均有优异的表现,这归功于 STM8S 系列的 8 位 CISC 指令集以及 STM32F1系列的 Cortex 内核引入的 16 位 Thumb-2 模式。
3片上外设差异
ST 8位和 32位 MCU 产品线之间的片上外设具有一致性,大多数基本 MCU 外设均定义和构建为可从一个产品系列移植到另一个产品系列。
这通过将 8 位外设简单但有效地修改为 32 位字来实现。这样做的好处是可节约成本和功耗,并且资源易于了解。
如果需要更高性能,可在系统层面通过更宽的总线和 DMA 控制器对资源加以补充。在了解了外设的工作原理后,可以将外设应用到 STM8S 和 STM32 系列,从而加速两种器件之间的转换。
ARM 处理器和外设符合 AMBA 总线规范,采用 32 位数据总线,而 STM8S 器件使用更为简单但有效的 8 位总线标准。从功能角度看,它们仅在以下方面存在差异:
-
寄存器大小: 8 位与 16 或 32 位 -
直接取决于 CPU 运行速度的最大时钟频率 -
DMA,可通过简单数据管理减轻 CPU 的负荷并提高最大数据吞吐量 -
一些产品特定功能,如 I/O 端口管理
对比STM8S 和 STM32F1 的 SPI 框图:
SPI寄存器:
从上面框图和寄存器可以看出:除了几个有区别的位和寄存器大小外,寄存器和位的名称以及在寄存器中的位置都是相似的。
4系统外设
当今的 MCU 是复杂的 SoC(片上系统),其中不仅包含许多外设,还包含一些高级系统特性,旨在缩减物料清单或增强系统的安全性和稳定性。
1.复位
STM8S 和 STM32 基本具有相同的复位电路,仅有细微的差异:
NRST 引脚既是输入也是具有内置上拉电阻的开漏输出。为实现 EMS(电磁敏感度)鲁棒性,插入了一个滤波器以避免毛刺传播到数字电路中。双向复位有三个优点:
-
对于多 MCU 系统,双向复位可确保在启动或热复位时所有子处理器均正确同步 -
对于其它 IC,在系统层面还可以使用 MCU 内嵌的电压监控器(上电复位和欠压复位) -
当生成假内部复位时,在调试过程中会有很大帮助
2.时钟
STM8和STM32时钟都具有很强大的功能,特别是最近推出的STM32G0具有高精度内部时钟,可以省去外部晶振,减少硬件及PCB。
STM8不具备倍频功能,各方面相对要弱一点。STM32具有倍频、外设时钟分频等强大功能。同时,STM8和32都具有独立外设时钟使能功能,以降低功耗。
看下STM32F1时钟树,就大概了解有哪些功能了:
3.存储器
两种产品线均基于非易失性存储器并具有一个选项字节加载器。此机制取代了用于 MCU 上电配置的传统熔丝位:用户可以在编程时选择多种选项,这些选项会随程序二进制映像一起写入。
所有新型微控制器都具有以下几个特性:
-
暂停、停止或待机模式下的复位:可在 MCU 意外进入低功耗模式时避免发生死锁情况,适用于不能处理此类配置的应用 -
硬件/软件看门狗,可以在复位之后立即通过硬件启动看门狗 -
存储器读保护,用于防止对程序内容的窃取 -
存储器写保护,用于保护存储器中包含关键代码的部分。通常,这适用于自举代码或IAP(应用内编程)驱动程序
这些选项可自动使能安全性和可靠性特性,这样即使在 CPU 获取第一个指令之前出现干扰或攻击,应用也可以恢复。
STM8S 和 STM32 器件具有嵌入式自举加载器,通过它可以使用板上串行接口(例如 UART)重新烧写内部 Flash。随后可以将任何具有串行通讯接口的 PC 用作编程工具,来烧写或更新 Flash 以及数据 EEPROM 存储器的内容。 ST 提供了一个软件实用程序来执行自举加载器支持的所有操作。
当然,还有更多系统特性相关的内容,比如安全性、低功耗方面。这些设计都具有高度一致性。
5软件
STM8和STM32除了上面描述的一些内容具有高度一致性之外,其实,对应我们软件开发工程师来说,软件才是最为关心的一点。
在STM8和STM32产品设计之初,工程师早就考虑过这个问题。因为二者系统、内核及外设都具有一致性,所以软件库也是设计具有一致性。
1.寄存器、库开发
这个我就不说了,从51过来的都知道,对于寄存器比较少的MCU来说,不是问题。对于STM8来说,其实我觉得还好,使用寄存器开发,就是需要更多时间了解寄存器。
我其实不是很建议大家使用寄存器开发,现在STM8有标准外设库,库的API函数接口也容易理解,直接拿来省事,也能方便理解寄存器。
那么对于STM32这种有大量寄存器的MCU,我同样也是不建议大家直接使用寄存器开发,部分功能可以针对库优化成寄存器。
2.STM8、32CubeMX工具
STM8CubeMX和STM32CubeMX这两个工具我不止一次在公众号提到,ST官方的目前的趋势就是希望用户使用这个工具来开发。
而且,大家已经发现,STM32有些新出来的MCU是没有标准外设库了。所以,这两个工具建议大家也要学习。
STM8CubeMX目前更新至V1.3.0,只能提供配置,方便了解MCU使用资源情况,还不具备自动生成代码功能,不过我觉得后面应该具有这个功能。
所以:如果基础不怎么好,建议先STM8,等学到一定基础可以再学STM32。如果自认基础还可以,C语言也行,那么直接上STM32不成问题。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !