目录
相关资料下载
新建工程
导入启动程序
导入库函数
相关资料下载
下载链接(来自B站江协科技)
通过百度网盘分享的文件:STM32入门教程资料
链接:https://pan.baidu.com/s/17_sbwMXU-xBVFA2sK0smrg?pwd=cgn6
提取码:cgn6
STM32的开发方式
STM32开发方式有3种,分别是基于寄存器开发、基于标准库以及HAL库的开发方式。
寄存器开发方式最为底层,性能最强,但STM32目前结构复杂,寄存器太多,不推荐使用这种方式
基于库函数开发方式则是使用ST官方提供的封装函数,通过这些函数来间接的调用配置寄存器,ST对函数封装较好,既能满足对寄存器的配置,对开发人员也比较友好,提高开发效率
基于HAL库方式,可以使用图形化界面快速配置STM32,但隐藏了底层逻辑,不利于深入理解。
新建工程
在Keil5上方的Project->new uVersion Project… 新建工程
在这里提示要新建项目开发板,我们这里使用的是”STM32F103C8“,如果没有STMicroelectronics的芯片选择,可以看看上一期的环境搭建。
来到下载好固件库,将STM32F10x系列的库函数压缩包解压
进入库函数文件夹后可以看到如下内容
文件名 | 作用说明 |
---|---|
_htmresc | Logo图片 |
Librairs | 库函数文件 |
Project | 工程示例 |
Utilities | 评估版,用于测评STM32 |
Release_Notes.html | 发布文档 |
stm32f10x_stdperiph_lib_um.chm | 库函数使用手册 |
添加启动程序Start
1. 在工程下新建文件夹”Start”
用于存放STM32启动相关程序
2. 导入STM32启动程序
在固件库STM32F10x_StdPeriph_Lib_V3.5.0的库函数LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm下找到启动程序,全部复制到工程文件目录下的新建的Start目录里
3. 导入STM32外设寄存器描述文件以及时钟配置文件
接着返回到STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x,可以看到三个代码文件和一个说明手册,将其也Copy到工程的Start下。
文件名 | 作用说明 |
---|---|
Release_Notes.html | STM32F10x库函数说明手册 |
stm32f10x.h | 外设寄存器描述文件,用于描述STM32有哪些外设寄存器和对应地址 |
system_stm32f10x.c/system_stm32f10x.h | 用于配置时钟,系统主频72MHZ 就是system文件里函数配置的 |
4. 导入内核寄存器描述以及配置函数
在STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport目录下包含内核寄存器描述,拷贝到Start目录下
5. 将Start文件添加到工程项目
使用Keil5打开项目,再新建一个Start目录
再右键选择Add Existing Files to Group 'Start'
选择我们新建的Start目录,将文件类型选择All files(.)
首先添加启动文件,启动文件有很多分类,需要根据使用的STM32开发板型号来选择
作者使用的是start_stm32f10x_md.s,选中启动文件,再选中所有的.c .h(外设内核寄存器描述以及时钟和内核配置文件)点Add添加进来
这些是STM32最基本的文件,不需要再作修改。每个文件带了个小钥匙,代表只读文件。
添加工程头文件路径
必须要在工程选项中添加头文件路径,否则软件编译时是找不到.h文件的。
首先点击options for targer…
在C/C++里找到Include Path栏,点击右边的添加
点击New,将Start文件夹添加进去,这里作者手动将前面的绝对路径C://…改成了.相对路径
新建用户程序目录以及主程序
在项目文件夹里新建用户文件夹
在Keil5中右键选择Target->Add Group新建组,更名为User。再右建User组,选择Add New Item新建c文件,新建路径选择为刚刚在工程目录下新建的User文件夹
接着来到main代码文件,在main下右键选择insert “#include file”插入启动程序的头文件
在main文件中编写main函数,并加入while(1)死循环
#include "stm32f10x.h"
int main(void)
{
while (1)
{}
}
写好后在左上角选择Build编译
接着使用杜邦线将STLINK与STM32连接,接线方式如表格所示
STLINK | STM32 |
---|---|
3.3V | 3.3V |
SWCLK | DCLK |
GND | GND |
SWDIO | DIO |
接着在选择魔术棒,选择ST-LINK Debugger
再点Debbuger右侧Set->Flash Downloadi,将Reset and Run勾选上,这样以后每次下载后都会复位并运行程序。
最后点击Download按钮就能将程序下载到STM32板子上了
导入库函数
与启动程序相同,在工程目录下新建”Library”目录,在工程中Add添加Group,再将固件库STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driversrc以及inc下的所有文件复制到Library目录下,
同样用Add Existing Files方式添加到工程。
光将库函数导进来还不够,还需要配置库函数头文件引用信息,以及库函数中断,所以需要将固件库模板
STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template下的三个文件stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h导入进来,同样是将其复制到User目录下,再在项目中导入。
接着需要注意的是,还需要声明一个宏后才能够使stm32f10x_conf.h引用生效
右键头文件选择Open document “stm32f10x.h”进入到头文件的声明中
进入头文件后划到最下方,可以看到这里定义了,必须声明宏USE_STDPERIPH_DRIVER之后引用头文件才有效
复制USE_STDPERIPH_DRIVER到工程选项下的C/C++中的Preprocessor Symbols->Define中去
Include path也要将Libaray加入进去