手把手新建STM32工程–寄存器版
手把手新建STM32工程–寄存器版
前言
硬件:STM32F103VET6
标准库文件下载
官网地址:https://www.st.com.cn/content/st_com/zh.html
1.点击工具与软件,点击嵌入式软件,选择微控制器软件,点击STM32微控制器软件
2. 选择微控制器软件,点击STM32微控制器软件,选择STM32标准外设软件库,选择F1系列
3. 最后选择版本下载!
4. 文件夹介绍
_htmresc文件夹内是官方Logo图片,可以忽略。
Libraries 文件夹下面有 CMSIS 和 STM32F4xx_StdPeriph_Driver 两个目录,这两个目录包 含固件库核心的所有子文件夹和文件,是代码移植的重头戏。CMSIS 文件夹存放的是符合 CMSIS 规范的一些文件,包括内核和外设, Driver 文件夹下是STM32F4 标准外设固件库源码文件和对应的头文件,说白了就是将寄存器封装好的函数接口。
Project 文件夹下面有STM32F4xx_StdPeriph_Examples 和STM32F4xx_StdPeriph_Template 两个文件夹,Examples文件夹下是固件示例源码,Template文件夹下是工程模板。这些源码的学习对以后的开发学习非常重要。
Utilities 文件夹下就是官方评估板的一些对应源码,可以忽略不看。
新建本地文件夹
在D:\CODE\Demo路径下新建这几个文件夹
如果用编译器手动编译一下就知道:
.c > .i > .s > .o > …
先是预处理生成 .i 文件,.i 文件就是.c按照预处理命令处理后的文件,注释删了,该替换的替换该包含的包含
然后由 .i 编译生成 .s ,就是汇编代码,(比如启动文件那样的)
由.s 汇编成 .o ,.o 是机器码,用记事本打开会发现全是十六进制代码
最后是链接,把附带的静态库动态库加进去生成最终的文件
移植文件
1. 启动文件
在D:\CODE\学习\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm找到我们需要的启动文件,并将其复制到D:\CODE\Demo\STARTUP中
启动文件分类
2. 片上外设寄存器定义文件
在D:\CODE\学习\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中将stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h复制到D:\CODE\Demo\STARTUP中
3. ARM内核寄存器定义文件
在D:\CODE\学习\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中将core_cm3.h复制到D:\CODE\Demo\STARTUP中
新建Keil工程
1. 新建工程
2. 选择本地文件夹APP,点击保存
3. 选择单片机品牌以及系列、型号
4. 点击分组按钮
5. 修改根组名称,新建分组,修改名称,添加文件
6. 具体添加的文件
7. 新建main.c文件,编写main函数
8. 点击魔术棒修改配置
9. 修改编译器版本,这里用5,根据个人习惯
10. 修改编译中间文件obj生成位置
11. 修改Listing文件生成位置
12. 添加所有文件路径
13. 添加全局宏定义,根据不同的单片机型号,选择不同的全局宏定义
14. 设置编译优化等级0,编译优化等级虽可减少编译后文件大小,但是会出现不可预料的bug,所以一般不建议开,设置为0即可
15. 点击编译,编译成功
STM32移植头文件解释
CMSIS标准中最主要的为CMSIS核心层,它包括了:
内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM公司提供。
设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。
CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口, 屏蔽了硬件差异,这对软件的移植是有极大的好处的。STM32的库,就是按照CMSIS标准建立的。
在CoreSupport文件夹中有core_cm3.c和core_cm3.h两个文件。
Core_cm3.h头文件里面实现了内核的寄存器映射,对应外设头文件stm32f10x.h, 区别就是一个针对内核的外设,一个针对片上(内核之外)的外设。
文件 “stdio.h” 文件位于RVMDK这个软件的安装目录下,主要作用是提供一些类型定义。
Stm32f10x.h
这个头文件实现了片上外设的所有寄存器的映射,是一个非常重要的头文件,在内核中与之想对应的头文件是core_cm3.h。
system_stm32f10x.c
system_stm32f10x.c文件实现了STM32的时钟配置,操作的是片上的RCC这个外设。系统在上电之后,首选会执行由汇编编写的启动文件, 启动文件中的复位函数中调用的SystemInit函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成72M。如果后面我们需要重新配置系统时钟, 我们就可以参考这个函数重写。为了维持库的完整性,我们不会直接在这个文件里面修改时钟配置函数。
startup_stm32f10x_hd.s
启动文件的作用:进行堆、栈的初始化,构建中断异常向量表及中断处理函数的定义,引导进入main主函数等
作者:热情的铁壳坤