一、配置寄存器编程和库函数编程
- STM32通过配置寄存器编程类似于51单片机的编程方式,此方法虽然较为直观、效率高,但是需要翻阅STM32技术手册,开发效率低。
- 库函数编程通过引入官方编写好的STM32的内核和外设的函数,调用函数以实现配置寄存器的目的,开发效率高。
二、工程架构

- STM32在运行main函数前会运行startup_stm3210x_xx.s启动函数,其中xx需要根据stm32FXXX的具体型号进行选择,这里使用startup_stm3210x_md.s。该函数由汇编语言编写。
- 在startup_stm3210x_md.s中调用了复位中断和其他中断函数,其中复位中断主要调用了SystemInit函数(配置微控制器系统,初始化嵌入式闪存接口,更新系统核心时钟变量,总之就是完成了一些初始化工作)。
- 在mian函数中需要调用函数进行配置寄存器,以实现指定功能。通常需要在main函数中引用 stm32f10x.h头文件,该头文件中又引入了core_cm3.h和system_stm32f10x.h头文件,其中包含了系统内核的寄存器地址及其相应函数。
- 在stm32f10x.h偏尾部有以下语句,该语句为一个条件编译,当程序中定义了USE_STDPERIPH_DRIVER语句(使用标准外设驱动)时,将引入stm32f10x_conf.h头文件,该头文件中引入了所有STM32外设的头文件(时钟、定时器、adc、中断、串口、spi等),编译后即可调用外设的函数。
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
- 标准外设驱动可在魔术棒 —> C/C++ —> Preprocessor Symbols —> Difine中设置。
新建工程
- 建立工程文件夹,Keil中新建工程,选择型号
- 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
- 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
- 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
- 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
- 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run