试验原因
从头移植了F1固件库的模板,看到官方启动文件中有好几个,都导入了工程,但是在工程中只使用一个启动文件。
这说明,官方demo为了维护方便和便于用户使用,换个mcu只需要重新选一个启动文件,而不用动工程本身。
那到底哪种F1的MCU该选哪个启动文件呢?
启动文件的命名规则为 startup_stm32f10x_DD_EX.s, 用bc4对比每个.s 发现注释里有讲命令的规则.
DD 代表了产品类型.
"cl“ is “Connectivity Line” => 连接型(这个不好翻译, 可能是入门级,最低密度,最舞美价廉的意思)
”ld“ is “Low Density” => 低密度型
”md“ is “Medium Density” => 普通密度型
”hd“ is “High Density” => 高密度型
”xl“ is “XL-Density” => 超高密度(性能最高)
可以看出 cl => xl 是性价比的变化, 那xl型应该最贵了,性能和资源也是最好的。
EX 只有空或vl.
空就是标准配配置型
”vl“ is “Value Line” => 超值型, 也不知道在MCU之间比对,超值型如何体现,感觉混乱的。
比对了一下同名称前缀,有无_vl后缀的.s, 超值型的.中断向量少些. 有些资源(USB/CAN)没有, 好像就这2种资源没有.
那么将MCU的价格,资源,性能从低到高的排列应该如下:
startup_stm32f10x_cl.s
startup_stm32f10x_ld_vl.s
startup_stm32f10x_ld.s
startup_stm32f10x_md_vl.s
startup_stm32f10x_md.s
startup_stm32f10x_hd_vl.s
startup_stm32f10x_hd.s
startup_stm32f10x_xl.s
F1产品线对应的MCU(F100/F101/F102/F103/F105/F107)如下, 但是并没有按照这8个系列分类,需要自己去选(F102/F105/F107型号较少),因为每个子系列的MCU的性能特点都是组合的(e.g. STM32F103, STM32F107产品线中都有可能有ld/md/hd/xl + vl的区别).
F100X的数据表中,没有高中低容量的说明,具体还是要自己看数据表对高中低容量。
F100的不同型号,对应的容量只在数据表开始的简介里面有。
其他非F100X的MCU数据表中,都说明了高中低容量。
F102是中容量的,选择startup_stm32f10x_md.s
F103系列的有低中高容量之分,根据FLASH容量选择ld/md/hd/xl.s
其他不能确定容量高低的MCU可以参照F103来。
ld < 64KB
64KB <= md < 256KB
256KB <= hd <= 512KB
512KB < xl
F105/F107都是cl系列的, 选用startup_stm32f10x_cl.s
总结
启动文件.s中主要描述的是中断向量表和用户堆栈的初始化代码。
这8个.s的堆栈初始化代码用bc4比对了,都一样。
ALIGN
;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF :DEF:__MICROLIB
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap
LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem
BX LR
ALIGN
ENDIF
END
;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****
不同MCU用到的启动文件,只有中断向量表不同。
其实还是拿板子上用到的具体MCU,结合数据表(知道片上资源了)来对照启动文件.s中描述的中断向量表来确定到底要用哪个启动文件,这样最准。
也可以在STMCUFinder中找具体MCU, 然后看一下是否有开发板(评估板/探索板/入门板)可选, 然后去下那种开发板的demo工程,这样就能知道主流MCU是用啥启动文件了。
e.g.
STM32F100ZE => STM32100E-EVAL
STM32F100RB => STM32VLDISCOVERY
如果那种MCU没出开发板,只能自己用MCU数据表来比对启动文件中描述的中断向量表来确定启动文件是哪个。