我用Arm時,最早用的是A8;后來用STM32時,知道了STM32這種類似於單片機之類的東西,其實也是Arm的。至於他們之間的區別和聯系,感覺自己好像明白,又不能完全說得清楚,於是抽了個時間好好了整理了一下,放在這里備忘吧。
Arm分為三個系列Cortex-A系列,Cortex-M系列和Cortex-R.
以前用過的A8,A9之類的都屬於Cortex-A系列;A是Application的縮寫,表示高性能應用處理器
STM32單片機都屬於Cortex-M系列。M是Micro的縮寫,表示微控制器
Cortex-R系列我沒用過,不知道有什么典型的CPU代表。R是RealTime的縮寫,表示實時處理器。
A8/A9/A12/A15和STM32其實都是基於ARMv7架構的,只不過A8/A9/A12/A15是基於基於ARMv7-A 架構的;STM32是基於使用ARMv7-m架構的,用的cm3.
現在市面上大家的叫法很亂,容易把人叫暈菜了。所以我整理了一下常見的暈菜問題:
1.ARMv7 和ARM7是兩個東西。
ARMv7是內核,現在STM32和A8/A9/A12/A15之類依然在用ARMv7的內核。現在市面大多數常用的ARM的片子都是基於ARMv7內核的。直到ARM推出了Cortex-A53和Cortex-A57這兩款屬於Cortex-A50系列的CPU,首次采用了64位的ARMv8架構。
ARM7是老得掉牙的片子了,最早推出是在1994年的時候,包括ARM7TDMI-S(基於ARMv4T架構)和ARM7EJ-S(基於ARMv5TEJ架構等等)。現在連嵌入式領域都已經不用了。
2.ARM9 和ARM A9 也是兩個東西。
ARM A9通常指的是ARM Cortex-A系列的A9芯片。它的內核是ARMv7系列的,用的ARMv7-A架構。
ARM9 是基於ARMv5架構的,ARM11 是基於ARMv6架構的 ARM9和ARM11已經是很老的片子了,用得很少。現在學ARM基本都是從Cortex-A8/A9 上手。
所以ARM系列按照時間順序依次應該是這樣的:
ARM7(ARMv4/ARMv5內核,馮諾依曼結構)-->ARM9(ARMv5內核,哈佛結構)-->ARM11(ARMv6內核,哈佛結構)->Cortex-A5/A7/A8/A9/A12/A15(32位的ARMv7-A內核,哈佛結構)-->Cortex-A57/A53(64位的ARMv8架構,哈佛結構)
STM32系列與ARM的A系列之間的區別:主要是主頻/RAM/ROM/時鍾/硬件管腳的區別。另外還有一個區別,STM32是不帶MMU(內存管理單元的),所以STM32不適合跑大的linux系統,最多跑跑ucos和freertos之流。當然,其實大多數時候,用STM32都是小型項目,很多都是在裸奔的。而A系列的CPU跑各種版本的linux都表示無壓力。
最后整理一下STM32現在用得比較多的幾個CPU的參數:
F103 主頻72M ; RAM 20k ; Flash 64/128k; I/O數量 80 ; 通信接口數量 9 ; timer數目 7
F405 主頻168M ; RAM 192K ; Flash 1M ; I/O數量 140 ; 通信接口數量 15 ; timer數目 17
F427 主頻180M ; RAM 256K ; Flash 2M ; I/O數量 168 ; 通信接口數量 21 ; timer數目 17