一、固件库的获取
- ST官网获取:https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32054.html
- 找作者要资料
二、创建库函数工程
- 工程文件夹中要包含User、Obj、Libraries
- User: 存放用户文件、包括main、main.c、STM32的一个头文件、配置文件、中断文件等
- Obj: 编译器产生的一些中间文件,如汇编链接的一些链表文件、调试信息、Hex文件(使用串口下载程序的时候,要定位到Obj文件夹下的Hex文件,烧写到芯片当中进行运行)
- Libraries: STM32库文件,包括CMSIS的一些外设库文件都放在这个文件夹下
Libraries文件夹
- Libraries文件夹包含:CMSIS、STM32F10x_StdPeriph_Driver(外设驱动文件夹)
- CMSIS: 用来存放CMSIS标准的一些文件、启动文件 CMSIS里面要存放M3内核通用文件
启动文件 hd.s:代表STM3210系列高容量的芯片使用的启动文件(ZET6) md.s:中等容量(VCT6、VET6等) ld.s:低容量(C8T6)
- STM32F10x_StdPeriph_Driver文件夹:存放外设驱动文件
官方提供的里面有src和inc,src是源文件,inc是与源文件对应的头文件,将两个文件夹直接复制进去
User文件夹
头文件
Obj文件夹
需要在Keil环境设置时将它的一些中间文件生成路径定位到Obj文件夹下
三、新建工程
- 打开Keil软件
- 新建工程 命名不要使用中文或特殊符号,要使用英文
- 选择好型号(选择自己使用的型号),点击OK
- 弹出的窗口是一些运行环境,不需要管,点击取消
- 这样工程已经添加好,工程名称也已经定义了,这个是一个工程文件,以后打开文件打开这个即可
Temptlate是刚才新建的工程文件名,之后打开工程直接双击文件即可
- 加载需要的文件
- 方法一:
- 方法二:双击
Sourse
,定位到User
文件夹,进行添加 - 方法三:点击上方管理项目文件
重新命名工程组(添加目录) 里面有User、Startup(启动文件)、CMSIS(存放CMSIS标准的文件:M3的内核文件、SystemInit初始化时钟文件)、StdPeriph_Drivre(标准外设驱动文件)
文件添加 User文件添加
Startup(启动文件)文件添加
CMSIS文件添加
StdPeriph_Drivre文件添加 只需要添加源文件,直接包含头文件的路径就ok,根据我们指示的路径自动调用它的头文件,就不需要添加头文件了。 编译的时候,所有的源文件都要编译一遍,使用工程的时候不一定需要全部的外设,为了使工程更加的精简,所以需要哪个外设添加哪个外设的文件进来,不需要全添加,全添加会占用电脑的内存 简单外设添加举例
三、工程配置
配置魔术棒
- 勾选
Use MicroLIB
:在后面使用串口通信、串口重定向的时候,会使用到一个printf
的输出函数,这个输出函数是需要这个的支持的
- 勾选创建
Hex
文件,Hex
文件是我们使用串口下载的时候要将生成的.hex
文件烧写到芯片当中运行我们的程序
- 在输出选项卡有一个
Objects
,keil5
默认给我们创建了,但是我们希望都存放到Obj
文件夹中,需要进行路径的重新定义
- 还需要把
Listing
下生成的文件也存放到Obj下
- C/C++中,需要对处理器类型和库进行宏定义,在Define这里需要配置两个宏,这两个宏是全局的宏,在整个工程中都会应用到的,当宏定义了,有些程序才可以使用 全局宏:
USE_STDPERIPH_DRIVER,STM32F10X_HD
注意逗号是英文逗号,逗号左边是使用标准外设驱动文件,外设驱动文件会通过这个宏来使能一些东西。逗号右边是芯片类型(高容量),是用来区分芯片的容量
- 添加头文件路径
- 通过
Debug
配置ARM仿真器(接下来需要根据自己选择的仿真器进行配置,下面皆为作者教程),配置好以后可以通过仿真器给开发板下载程序,在线调试等都可以使用- 如果选择SW模式,前面要打勾
- 接下来在这个界面点击
Flash Download
(用于添加芯片烧写算法)进行配置,当选择芯片类型正确之后默认会出来,如果没有①,则需要进行手动添加,记得勾选复位并运行(程序下载之后会自动运行)
- 编译之后
Obj
文件夹中就会生成很多文件,这就是系统生成的文件 - 将
Objects
和Listing
文件夹删除即可,这两个文件夹已经没有作用了