这是可以引起高度争议的主题之一。有很多不同的观点,不同的事情对不同的人很重要。我会尽量给出一个全面的答案,但要明白总会有人不同意。只要明白那些不同意我的人是错误的。(开玩笑。)
快速总结:
这个答案会很长,所以让我先总结一下。对于绝大多数人来说,最新的 ARM Cortex-M0/M3/M4 芯片提供了最好的解决方案,最好的功能和成本。将这些 32 位 MCU 与其 8 位和 16 位祖先(如 PIC 和 MSP430)进行比较时,情况甚至更是如此。M0 的售价低于 1 美元/个,M4 的售价低于 2 美元/个,因此除了对价格非常敏感的应用之外,ARM 解决方案都非常不错。M0 的功耗非常低,对大多数人来说应该足够了。对于那些对功率非常敏感的人来说,MSP430 可能仍然是更好的选择,但即使是这些应用,M0 也值得考虑。
如果您对更深入的分析感兴趣,请继续阅读,否则您现在可以停止阅读。
我现在将查看每个区域并比较不同的 MCU:
执行速度
当然,32 位 MCU 会更快。它们往往具有更快的时钟速度,但也为每个时钟做更多的工作。像 ARM Cortex-M4 这样的 MCU 包括 DSP 处理指令,甚至可以在硬件中支持浮点。8 位和 16 位 CPU 可以对 32 位数字进行操作,但这样做效率不高。这样做会很快消耗 CPU 寄存器、CPU 时钟周期和用于程序存储的闪存。
易于开发
在我看来,这是使用现代 32 位 MCU 最有价值的原因——但也是最被低估的原因。让我首先将其与 8 位 PIC 进行比较。这是最坏情况的比较,也是最能说明我观点的。
较小的 PIC 基本上要求用汇编语言进行编程。诚然,即使是 8 位 PIC 也有可用的 C 编译器,但这些编译器要么是免费的,要么是好的。您无法获得既好又免费的编译器。免费版编译器的缺陷在于其优化不如“Pro”版。Pro 版的价格约为 1,000 美元,仅支持一个 PIC 芯片系列(8、16 或 32 位芯片)。如果您想使用多个家庭,则必须再花 1,000 美元购买另一份。编译器的“标准”版本进行了中等程度的优化,每个芯片系列的成本约为 500 美元。按照现代标准,8 位 PIC 速度较慢,需要良好的优化。
相比之下,有许多免费的用于 ARM MCU 的优秀 C 编译器。当存在限制时,这些限制通常针对支持的闪存的最大大小。在 Freescale Codewarrior 工具上,此限制为 128Kbytes。对于这个论坛上的大多数人来说,这已经足够了。
使用 C 编译器的优点是您不必(尽可能多地)关心 CPU 内存映射的低级细节。在 PIC 上分页特别痛苦,如果可能的话最好避免。另一个优点是您不必为在 8 位 MCU 上处理 16 位和 32 位数字(或 16 位 MCU 上的 32 位数字)而烦恼。虽然用汇编语言做到这一点并不是特别困难,但它在后面很痛苦并且容易出错。
还有其他运行良好的非 ARM C 编译器。MSP430 编译器似乎做得很合理。赛普拉斯 PSoC 工具(尤其是 PSoC1)有问题。
平面内存模型
具有分页 RAM/寄存器/闪存的 MCU 只是愚蠢的。是的,我说的是 8 位 PIC。哑巴,哑巴,哑巴。这让我对图片失去了兴趣,以至于我什至懒得去看他们的新东西。(免责声明:这意味着新的图片可能会得到改进,我只是不知道。)
使用 8 位 MCU 很难(但并非不可能)访问大于 256 字节的数据结构。使用 16 位 MCU,可增加到 64 kbytes 或 kwords。使用高达 4 GB 的 32 位 MCU。
一个好的 C 编译器可以对程序员(又名你)隐藏很多这些,但即便如此,它也会影响程序大小和执行速度。
有许多 MCU 应用程序对此不会有问题,但当然还有许多其他应用程序会遇到此问题。这主要是您在 RAM 或闪存中需要多少数据(数组和结构)的问题。当然,随着 CPU 速度的增加,使用更大数据结构的几率也会增加!
包装尺寸
一些小型 PIC 和其他 8 位 MCU 以非常小的封装形式提供。6针和8针!目前我所知道的最小的 ARM Cortex-M0 在 QFN-28 中。虽然 QFN-28 对大多数人来说足够小,但对所有人来说还不够小。
成本
最便宜的 PIC 大约是最便宜的 ARM Cortex-M0 价格的三分之一。但这实际上是 0.32 美元对 0.85 美元。是的,价格差异对某些人来说很重要。但我认为,这个网站上的大多数人并不关心这么小的成本差异。
同样,在将功能更强大的 MCU 与 ARM Cortex-M0/M3/M4 进行比较时,通常 ARM Cortex 的表现“大致相等”或居于首位。当考虑到其他因素(易于开发、编译器成本等)时,ARM 非常有吸引力。
第二次总结
我想真正的问题是:为什么不使用 ARM Cortex-M0/M3/M4?当绝对成本非常重要时。当超低功耗至关重要时。需要最小封装尺寸时。当速度不重要时。但是对于绝大多数应用程序,这些都不适用,而 ARM 是目前最好的解决方案。
鉴于成本低,除非有充分的理由不使用 ARM Cortex,否则使用一个是有意义的。与大多数其他 MCU 相比,它将允许更快、更轻松的开发时间,更少的麻烦和更大的设计余量。
还有其他可用的非 ARM Cortex 32 位 MCU,但我也看不出它们有任何优势。采用标准 CPU 架构有很多优势,包括更好的开发工具和更快的技术创新。
当然,事情可以而且确实会发生变化。我所说的今天有效,但可能在一年甚至一个月后无效。做自己的功课。