STM32使用的都是ARM内核,基本使用到了Arm Cortex M0,M0+,M3,M4,M4F,M7,最新的还有M33以及Cortex A7(STM32MP157),内核的指令集是向下兼容的,也就是数字更大的内核,支持的指令集就越多,如下图所示:
当然,支持的指令集越多,芯片性能越强大,主频越高。比如M4F内核就相对于M4内核增加了FPU,支持硬件浮点运算。
对于软件编码来说,现在STM32主推HAL库,这个库在各个系列之间兼容性非常好,基本上屏蔽的底层内核之间的差异,只需要关注MCU偏上资源即可。
使用HAL库时,在使用上基本上没有区别,只有外设上的区别。性能不一样,高内核性能强大,还有FPU。
内核性能关系为M0<M3<M4<M7
1.不同内核的STM32内部硬件资源不一样。处理速度也不一样。越高级的内核含有的硬件资源越丰富,比如FPUTIM等。
2.使用开发库时,启动文件也不一样,需要选择对应内核的启动文件。
在使用时的区别不是很大,使用库函数,现在的库函数的API函数对于不同的芯片,差异是很小的。
主要就是性能上的不同M0最低,M7最高
stm32的内核有好多种对于不用的开发区域有不同的内核使用比如m3.m4之间有不同的所以根据需要来选择不用的内核使用
这些内核的CPU寄存器地址,还有对应的外设,缓存,DMA等都是不同的
如果使用STM32的HAL库开发,那程序可以互相移植,将代码移植到对应的SDK上面即可,不用大改,因为这些函数被高度封装,已经与硬件平台关系不大了
如果使用寄存器开发,那与寄存器有关的代码要改,具体要参考寄存器手册
不同的内核,寄存器是不一样的,有一些外设的配置也不太一样,所以,要注意手册上对于寄存器的说明
如果用库函数,这方面的关注可以少一些,库中都封装好了