天天看点

STM32: startup_**.s、Core_cm3.c、宏定义、HAL库

.s 启动文件选择

给STM32写程序时,我们需要在工程文件中加入厂家提供的启动文件(这里以STMf10x系列为例),里面包含的是启动代码,启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如下:

1、堆栈(SP)的初始化;

2、初始化程序计数器(PC);

3、设置向量表异常事件的入口地址;

4、调用 main 函数。

这些都是准备工作,如果看不懂目前初学也没什么关系,毕竟该文件是用汇编写的。。。。。

下面我们来看看ST公司提供的不同的文件,他们分别用于不同容量的STM32芯片:

startup_stm32f10x_ld_vl.s

startup_stm32f10x_ld.s

startup_stm32f10x_md_vl.s

startup_stm32f10x_md.s

startup_stm32f10x_hd.s

startup_stm32f10x_xl.s

startup_stm32f10x_cl.s

其中,ld.s 适用于小容量 产品;md.s 适用于中等容量产品;hd.s 适用于大容量产品;

LD:表示低密度产品 Flash容量在16k和32k之间的处理器

MD:表示中密度产品 Flash容量在64k和128之间的处理器

HD:表示高密度产品 Flash容量在256k和512k之间的处理器

XL:表示超高密度产品 Flash容量在512k和1024k之间的STM32F101x和STM32F103x处理器

CL:表示的是互联网型的处理器 是指STM32F105X和STM32F107X型处理器

VL:表示超值型的处理器,即STM32F100系列的处理器

  1. Low-density devices (STM32F10nx4 = 16k, STM32F10nx6 = 32k)
  • startup_stm32f10x_ld_vl.s: 小容量超值型。STM32F100xx系列,闪存16k~32k字节。
  • startup_stm32f10x_ld.s: 小容量型。STM32F101xx, STM32F102xx, STM32F103xx系列,闪存16k~32k字节。
  1. Medium-density devices (STM32F10nx8 = 64k, STM32F10nxB = 125k)
  • startup_stm32f10x_md_vl.s: 中容量超值型。STM32F100xx系列,闪存64k~128k字节。
  • startup_stm32f10x_md.s: 中容量型。STM32F101xx, STM32F102xx, STM32F103xx系列,闪存64k~128k字节。
  1. High-density devices (STM32F10nxC = 256k, STM32F10nxD = 384k, STM32F10nxE = 512k)
  • startup_stm32f10x_hd_vl.s: 大容量超值型。STM32F100xx系列,闪存256k~512k字节。
  • startup_stm32f10x_hd.s: 大容量型。STM32F101xx, STM32F103xx系列,闪存256k~512k字节。
  1. XL-density devices (STM32F10nxF = 768k, STM32F10nxG = 1024k)
  • startup_stm32f10x_xl.s: 超大容量型。S TM32F101xx, STM32F103xx系列,闪存512k~1024k字节。
  1. Connectivity line devices (STM32F105xx, STM32F107xx)
  • startup_stm32f10x_cl.s: 互联型。STM32F105xx, STM32F107xx系列。

Core_cm3.c

CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。

Core_cm3.c内核文件,就是定义了一些Cortex-M3的寄存器和一些函数,包括NVIC,MPU,SCB,SysTick,Debug寄存器。

CMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。

CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。

MWAL用于对中间件的访问,现在该层还未实现。

DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。

CPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)。

STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
STM32: startup_**.s、Core_cm3.c、宏定义、HAL库

宏定义

对于STM32F103VCT6 宏定义中加入:STM32F10X_HD,USE_STDPERIPH_DRIVER

STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
芯片名称—>容量选择:
STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
也可以在确定芯片型号后,在Keil–>Flash download中确定容量;
STM32: startup_**.s、Core_cm3.c、宏定义、HAL库

补充:

众所周知STM32开发需要用到库函数,意法半导体(ST)的STM32系列MCU,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL(Hardware Abstraction Layer)库和LL(Low Layer)库三种。前两者都是常用的库,后面的LL库是ST最近才发布的,与HAL源码包一起提供,目前支持的芯片种类也偏少。然而,标准库已经不在更新支持,ST官方推荐使用HAL库。而HAL库开发,比较常见的也是官方推荐使用CubeMx进行初始化的配置,无论是MDK还是IAR只要改一下设置都可以生成工程。

标准库、HAL库、LL库支持的芯片类型:

STM32: startup_**.s、Core_cm3.c、宏定义、HAL库

例如:STM32F103c8t6的宏定义:

STM32F103xB,USE_HAL_DRIVER

STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
HAL库宏定义选择:
STM32: startup_**.s、Core_cm3.c、宏定义、HAL库

继续阅读