STM32采用CM3核,内核是整个微控制器的CPU,该内核是ARM公司设计的的一个处理器体系架构。芯片厂商负责设计在内核之外的部件,被称为核心外设或者片上外设。
因为CM3的系列芯片采用的内核是相同的,主要区别为核外的片上外设差异,这些差异却导致移植困难,解决不同芯片厂商生产的CM3微控制器的兼容新问题,ARM与芯片厂商建立了CMSIS标准,实际上是建立了一个软件抽象层。
CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商五官的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽硬件差异,便于软件移植。
CMSIS核心层包括:
内核函数层:包含用于访问内核寄存器的名称,地址定义,主要由ARM公司提供。
设备外设访问层:提供片上的核外外设的地址和中能够DAU你定义,主要有芯片生产商定义。
STM32固件库就是按照CMSIS标准建立。
几个比较重要的库文件:
1. core_cm3.h和core_cm3.c:由ARM公司提供,为采用CM3内核设计SoC的芯片商设计的芯片外设提供一个进入CM3内核的接口。core_cm3.c中有一些预编译器相关的条件编译语句,用于屏蔽不同编译器的差异。
2. System_stm32f10x.c:ST公司提供,设置系统时钟和总线时钟。
3. stm32f10x.h:包含了stm32中寄存器地址和结构体类型定义,在使用stm32 固件库的地方都要包括这个头文件。
4. 启动文件startup_stm32xxxxx.s:
作用:
① 初始化堆栈指针SP;
② 初始化程序计数器指针PC;
③ 设置堆栈的大小
④ 设置异常向量表的入口地址;
⑤ 配置外部SRAM作为数据存储器(用户配置,一般开发版没有外部SRAM);
⑥ 设置C库的分支入口_main(最终用来调用main函数)。
5. misc.c:提供外设对内核NVIC(中断向量控制器)的访问函数,在配置中断时,必须添加到工程中。
6. Stm32f10x_conf.h:用来配置使用了什么外设的头文件,通过对这个头渐渐的增加或者删除外设驱动函数库。
7. Stm32f10x_it.c:编写中断服务函数,该文件已经定义了一些系统异常的接口,其他普通中断函数有我们添加, 中断函数的接扣通过查找启动文件得到。