本教程所用文件 百度网盘提取码2222
本教程是为STM32f103c8t6新建工程,其它型号的单片机可能在文件选择上有少许差异,但是整体步骤相同。
目前STM32有基于寄存器、基于标准库(库函数)和基于HAL库三种开发方式。
- 基于寄存器的开发方式是用程序直接配置寄存器,以此达到想要的功能。
- 基于标准库的开发方式是通过调用ST公司已经封装好的函数来间接的配置寄存器。
- 基于HAL库的开发方式是利用一种图形化界面快速配置STM32。
基于寄存器的开发方式最底层,最直接,效率更高,但是由于STM32结构复杂,寄存器过多,所以基于寄存器的开发方式一般不推荐;基于HAL库的方式没有办法接触到底层逻辑,对初学者的能力锻炼有限,并且基于 HAL库的开发方式比其他方式需要更大的flash。因此初学者最好从基于标准库的开发方式学习,这样即能接触到底层逻辑,又能加快开发速度,在标准库使用熟练后再用HAL库提高开发速度。
基于寄存器的开发方式
-
在想要存放文件的位置新建一个文件夹,并在这一文件夹下新建一个工程文件夹(文件路径最好不要带中文和特殊符号)
-
打开Keil5软件→Project→New μVision Project→选择刚才新建的工程文件夹→给本次工程起个名字并保存
-
选择器件型号(根据使用的器件进行选择),并叉掉小助手
到此工程已经新建好了,但是还没有办法使用,我们还要给它添加一些必要文件。
- 解压固件库压缩文件,按路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm打开文件位置,找到STM32的启动文件并将文件全部复制到工程文件夹Project里(为了防止文件太乱,可以先在工程文件夹下新建一个文件夹,用来存放启动文件)
- 在刚才路径的上一级找到以下3个c文件,并将其复制到刚才新建的启动文件夹中
- 在路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下找到内核寄存器的描述文件,并将其复制粘贴到启动文件夹下
到此,工程的必要文件已经准备完成了,接下来就是将刚才复制的文件添加到工程中去。
- 在Keil5软件中,将Target 1文件夹下的文件夹改名为Start,并右键Start文件夹,点击Add Existing Files to Group ‘Start’
- 点击Start文件夹,然后将文件类型改为All files,这样我们就能看见所有类型的文件了
- 根据自己所用型号选择启动文件并添加(只能选择一个),然后将所有的.c和.h后缀的文件全部添加进去
本教程所用的STM32f103c8t6所用的头文件为md.s后缀的。
具体头文件选择方式见头文件选择方式
- 在工程选型中添加上头文件路径(按照以下箭头指向操作)
到此工程就已经建立完成了,下面新建一个main函数来验证工程是否建立成功。
验证工程建立是否成功
- 在工程文件夹下新建一个User文件夹
- 在Keil5软件中,右键Target 1文件夹,点击添加组,然后将组的名字也改为User
- 右键User文件夹,点击新建文件,选择c文件,给这个文件起个名字,然后将文件存放地址改成刚才在工程文件夹下创建的User文件夹
- 打开main.c文件,右键第一行,按照以下操作为这个文件添加一个头文件
- 接下来就可以开始写代码了
注意:主函数必须是int型,返回值为void,且最后一行为空行
- 点击编译并建立工程
若下面提示0错误,0警告,则说明工程建立没有问题
接下来我们就可以编写代码啦,我们只需要写好代码,编译,下载进板子之后就可以执行了
浅浅写一个点灯代码,记录一下自己第一次点灯成功😊(2023.7.14)
基于标准库的开发方式
基于库函数的开发方式需要在原来基于寄存器的开发方式上加入官方已经封装好的库函数,因此接下来的操作将会接着上面进行。
- 打开工程文件夹,在里面新建一个文件夹,用来存放库函数
- 将路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src下的文件(库函数源文件)全部复制粘贴到刚才新建的库函数文件夹下
- 将路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc下的文件(库函数头文件)也全部复制粘贴到刚才新建的库函数文件夹下
- 按照步骤在Target 1文件夹下新建一个组,将这个新组名改为刚才的库函数文件夹名
- 将刚才的库函数文件全部添加到这个新建的组中(记得要将文件类型改为All files)
- 将路径STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下的三个文件复制粘贴到工程文件夹下的User文件夹里
stm32f10x_conf:用来配置库函数头文件的包含关系
stm32f10x_it:用来存放中断函数
- 将刚才粘贴到User文件夹下的三个文件添加到User组当中
- 宏定义
右键main文件中的"stm32f10x.h"并打开
往最下面翻,找到以下几行代码
代码解读:这是一个条件编译语句,意思是只有定义了USE_STDPERIPH_DRIVER这一字符串,下面的**#include “stm32f10x_conf.h”**语句才有效。
点击魔法棒→C/C++→将刚才的字符串复制粘贴进Define中→再将Library和User两个文件夹全部包含进来
到此为止基于库函数的工程文件也建好了。
再次编译就可以判断工程建立是否成功啦!
一些Keil5软件的常用设置
更改调试器
点击“魔术棒”→DeBug→选择调试器
设置下载程序后立马复位并执行
在刚才更改调试器时点击右侧Settings,然后点击Flash Download,勾选上Reset and Run
如果不勾选此项,则每次下载程序后还需要按一下板子上的复位按钮才能执行程序。