如何新建STM32工程
目前STM32的开发方式主要有:基于寄存器的方式、基于标准库(库函数)的方式和基于HAL库的方式
1.基于寄存器的方式:用程序直接配置寄存器来达到我们想要的功能,这种方式的有点是直接、效率高.但STM32的寄存器太多了,这种方法不适用
2.基于库函数的方式:使用ST官方提供的封装好的函数,通过调用这些函数来间接地配置寄存器。由于ST对寄存器封装的比较好,所以这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率,所以我们使用这种方式来进行学习开发
3.基于HAL库的方式:可以使用图形化界面快速配置STM32。这种适合老手,这种方式隐藏了底层逻辑,如果对STM32不熟悉,不利于对水平的提高
新建工程流程
1.找个合适的位置新建用于存放工程的文件夹
2.找到图片中的这个位置
3.在上一个文件夹里再新建一个文件夹来存放本次工程
4.写个工程文件的名称
5.选择器件型号
6.找到STM32的启动文件,复制全部启动文件
7.回到工程文件夹新建一个Start文件夹,将复制的启动文件粘贴到里面
8.回到stm32f10x.h,找到如图三个文件
stm32f10x.h就是STM32的外设寄存器描述文件,作用是描述STM32有哪些寄存器和它对应的地址
下面两个system文件是用来配置时钟的
9.复制上图的三个文件,粘贴到Start文件夹
10.因为这个STM32是内核和内核外围的设备组成的,而且寄存器的内核配置文件和外围设备的描述文件不是一起的,所以我们还需要添加一个内核寄存器的描述文件
找到这两个内核的寄存器描述和内核配置文件,复制
粘贴到Start文件夹下
11.回到Keil将对应文件改名Start
然后添加已经存在的文件到组里来
添加这个启动文件
剩下的.c和.h文件都要添加
12.最后添加头文件路径
把Start文件夹添加进来
点击确定
13.回到工程文件夹,新建一个User文件夹用来放main函数
回到keil里添加组
改名叫User
右键添加新文件
创建main文件,路径记得选择在User
14.右键添加头文件,选stm32f10c.h
编写main函数
编译并建立工程
说明我的工程建设成功
不过只是它现在还是一个基于寄存器开发的工程
写个简单的代码
接好DAP与STM32
在keil里配置调试器
点击Setting
这样我们下载程序后会立马复位并执行
下面这个按钮是下载按钮,如果一切正常的话就会下载进STM32里
配置寄存器点灯(参考STM32的参考手册)
点灯代码:
%2Fimg%2Fimage-20260803010017195.png&pos_id=img-n4bcLviB-1785741870305)
熄灭代码:
上述这种操作寄存器的方式要去不断地查手册看对应寄存器的操作流程,即使是加上&、|、~、^这几个运算也会导致运算麻烦,容易出错的问题
所以接下来我们引入库函数
新建Library来存放库函数
找到并 导入库函数的源文件
再找到库函数的头文件复制粘贴过来
其中misc.c中是内核的库函数源文件
回到keil,添加Library组
同之前的步骤,添加已存在的文件
现在虽然库函数已经添加进来,但还不能使用
还要进行下面的操作
根据上面这个路径找到这三个文件复制
那个conf文件是用来配置库函数头文件的包含关系的,还有个用来参数检查的函数定义,这是所有库函数都需要的
两个it文件是用来存放中断函数的
粘贴到User目录下
回到User组里把那三个文件添加进来
在main.c文件的头文件进行右键打开头文件
找到
这个是一个条件编译,意思是:
如果你定义了USE_STDPERIPH_DRIVER(使用标准外设驱动)这个字符串,下面这个include conf.h文件才有效
复制选中这句
打开
粘贴到
头文件目录也要添加
编译发现0错误,0警告
这样我们基于库函数的工程就完成了
用库函数实现点灯的操作
这样能看函数的定义说明
补充:新建工程里的启动文件选择
前面的这一块不是只选了一个吗,现在我们来讲讲到底怎么选
根据这个表,先看是什么型号,再根据Flash容量的大小,看看你是哪一种
工程架构
startup是启动文件:启动文件内定义了中断向量表,中断服务函数等,中段服务函数中有个复位中断,这个是整个程序的入口。当STM32上电复位或者按下复位键之后就会进入复位中断函数执行,复位中断幻术组要做两件事情,第一是调用SystemInit函数,调用main函数。其他中断函数是达到触发条件后就会自动执行
SystemInit文件的作用:设置微控制器的启动,初始化嵌入式闪存接口、锁相环、更新系统内核的时钟变量
最右边的是那些文件就是外设和内核外设的寄存器描述。每个寄存器都封装了一大堆的函数,给我提供了人性化的函数调用方式。至于conf文件就是包含了头文件的文件,我们后面调用就只需要包含stm32f10x.h这个一个文件的头文件就可以达包含所有库函数头文件的效果,更加方便我们任意调用所有库函数
总结步骤
1.建立工程文件夹,Keil中新建工程,选择型号
2.工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
3.工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
4.工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
5.工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
6.工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run
eil中新建工程,选择型号
2.工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
3.工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
4.工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
5.工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
6.工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run