《stm32库开发实战指南》摘录及笔记
MCU(微控制器)
CMSIS标准( Cortex Microcontroller Software Interface Standard):解决软件在同内核、不同外设上移植困难的问题
- 内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供
- 设备外设访问层:提供了片上的核外外设地址中断意义主要由芯片生产商提供
STM32库是由ST公司针对STM32提供的函数接口,即API(Application Program Interface):应用程序接口,通过这些函数接口来配置STM32的寄存器。
学习时注意以下几点:
1)适应试用库的开发方式,加强运用C语言的能力,建立工程意识
2)熟悉Cortex-M系列芯片构架,了解CMSIS标准,熟悉STM32的总线架构
3)掌握I2C,SPI,SDIO,CAN,TCP/IP,等各种通信协议
库目录、文件简介:
- Libraries文件夹:驱动库的源代码及启动文件(在使用库开发时,我们需要把Libraries目录下的库函数文件添加到工程中)
- Project文件夹:用驱动库写的例子和一个工程模板
- 库帮助文档:这是一个已经编译好的HTML文件,主要讲述如何使用驱动库来编写自己的应用程序。
CMSIS文件下
库目录、文件简介
1. core_cm3.c文件
CoreSupport文件夹
core_cm3.c文件中包含了"stdint.h"这个头文件,这是一个ANSI C 文件,是独立于处理器之外的
stdint.c文件中的类型定义
1. /* exact-width signed integer types */
2. typedef signed char int8_t;
3. typedef signed short int int16_t;
4. typedef signed int int32_t;
5. typedef signed __int64 int64_t;
6.
7. /* exact-width unsigned integer types */
8. typedef unsigned char uint8_t;
9. typedef unsigned short int uint16_t;
10. typedef unsigned int uint32_t;
11. typedef unsigned __int64 uint64_t;
2. system_stm32f10x.c文件
(在DeviceSupport文件夹下的是启动文件、外设寄存器定义和中断向量定义层的一些文件,这是由ST公司提供的)
system_stm32f10x.c(由ST公司提供的,遵守CMSIS标准):功能是设置系统时钟和总线时钟。所有外设都与时钟的频率有关,所以这个文件的时钟配置很关键。
system_stm32f10x.c在实现系统时钟时要用到PLL(锁相环),这就需要操作寄存器,寄存器都是以存储器映射的方式来访问的,所以该文件中包含stm32f10x.h这个头文件。
3.stm32f10x.h文件
这个文件非常重要,它包含了STM32中寄存器地址和结构体类型定义,在使用到STM32固件库的地方都要包含这个头文件。
4.启动文件
- 启动文件的类型
Libraries\CMSIS\Core\CM3\startup\arm文件夹下是由汇编语言写的系统启动文件,不同的文件对应不同的芯片型号
文件名的英文缩写的意义如下:
cl:互联新产品,stm32f105/107系列
vl:超值型产品,stm32f100系列
xl:超高密度(容量)产品,stm32f101/103系列
ld:低密度产品,Flash小于64KB
md:中等密度产品,Flash等于64KB或者128KB
hd:高密度产品,Flash大于128KB
如STM32F103VET6,64KB RAM和512KB ROM,是属于高密度产品,所以启动文件要选择startup_stm32f10x_hd.s
- 启动文件的作用
启动文件是任何处理器在上电复位之后最先运行的一段汇编程序。在我们编写的C语言运行之前,需要由汇编语言为C语言的运行建立一个合适的环境,接下来才能运行我们的环境。
总的来说,其作用如下:
1.初始化堆栈指针SP
2.初始化程序计数器指针PC
3.设置堆、栈的大小
4.设置异常向量表的入口地址
5.配置外部SRAM作为数据存储器(这个有用户配置,一般开发板没有外部SRAM)
6.设置C库的分支入口_main(最终用来调用main函数)
7.3.5版本的启动文件还调用了在system_stm32f10x.c文件中的SystemIni()函数配置系统时钟,在旧版本的工程中要用户进入main函数自己调用SystemIni()函数
5.STM32F10x_StdPeriph_Driver文件夹
Libraries\STM32F10x_StdPerph_Driver文件夹下有inc(include缩写)和src(source缩写)这两个文件夹,这都属于CMSIS的设备外设函数部分。src里面是每个设备外设的驱动程序。
inc文件夹包含各个外设的头文件(stm32f10x_ppp.h),src文件夹包含各个外设的源文件(stm32f10x_ppp.c)。ppp为外设名称。
另外还有HTML文件为版本库更新说明。
6.stm32f10x_it.c文件和stm32f10x_conf.h文件
在库目录的Project\STM32F10x_StdPeriph_Template目录下,存放了一个官方的工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下的stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h这三个文件。
stm32f10x_it.c是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常接口,其他普通中断服务函数由我们自己添加。具体清查阅库启动文件的源码。
stm32f10x_conf.h被包含进stm32f10x_it.h文件是用来配置使用了什么外设的头文件,用这个头文件我们可以很方便地增加或删除上面Driver目录的外设驱动函数库。
实际开发中使用断言时,先通过定义USE_FULL_ASSERT宏来使能断言,然后定义"assert_failed"函数,通常我们会让它调用printf函数输出错误说明。使能断言后,程序运行时会检查函数的输入参数,当软件经过测试,可发布时,会取消USE_FULL_ASSERT宏来去掉断言功能,使程序全速运行。
stm32f10x_stdperiph_ib_um.chm(库文件帮助文档 ):查阅此文件来了解库函数原型或库函数调用方法,也可以直接阅读源码里的函数说明。
【初学stm32,不愿放弃,还有众多不懂之处,但万丈高楼平地起,加油】