固件库:固件库就是把操作寄存器的代码封装成函数给用户操作寄存器实现想要的功能
用固件库操作寄存器,新建工程的步骤:
1.在本地新建一个文件夹,存放库文件
CMSIS存放内核相关的头文件、启动文件和system _stm32f4xx.h system_stm32f4xx.c文件
Project存放工程文件
STM32F4xx_StdPeriph_Driver存放外设的头文件和源文件
User存放main.c、mian.h、stm32f4xx_it.h、stm32f4xx_it.c、(编写中断服务函数,定义了一些特殊的终端接口,一般中断函数都是自己写的)stm32f4xx_conf.h(根据芯片的型号去增减外设的头文件)
2.然后打开keil,新建工程。添加组,把对应的源文件添加进去
一个工程中必须要有startup_stm32f429_439xx.s、system _stm32f4xx.h、system_stm32f4xx.c、stm32f4xx.h这四个文件
startup_stm32f429_439xx.s启动文件(调用SystemInit()这个函数去配置STM32的时钟, 设置 C库的分支入口“__main(用来调用main函数))
system_stm32f4xx.c这个文件包含了stm32f4xx的系统时钟配置,启动文件调用的SystemInit()的这个函数是在system_stm32f4xx.c这个源文件中,这个源文件包含了stm32f4xx.h这个头文件。
stm32f4xx.h这个文件包含了stm32f4xx所有的外设寄存器定义、位定义和寄存器映射
3.编译
会发现有很多错误,因为我们在添加组的时候没有添加头文件的路径所以导致有错误
修改错误:(1) 首先打开选项卡,(C/C++)把需要用到的头文件路径添加进去
(2)编译一下,打开“stm32f4xx.h”这个文件,要定义宏(要用的是标准库,不是HAL库)和用的芯片
(3)把stm32f4xx_fsmc.h,去掉选择不编译(因为stm32f4xx_fmc.h这个头文件已经包含了stm32f4xx_fsmc.h,不能重复定义)
(4)修改stm32f4xx_it.c文件(去掉void SysTick_Handler(void)函数中的SYSTIK Handler 和#include math.h)
完成后就可以写代码了