STM32入门
在学习STM32之前建议学习51单片机打基础,不学也没关系
建议先下载软件Keil5 MDK,如果是在百度网盘下载的话很慢
学习工具
STM32
初学者建议选用stm32f10103c8t6
传感器
光敏电阻
热敏电阻
对射式红外模块
反射式红外模块
W25Q64 Flash存储模块
MPU6050陀螺仪和加速度计
旋转编码器
面包板
面包板用来固定单片机
OLED
0.96寸的OLED显示屏幕
STLINK
LED按键
蜂鸣器
杜邦线
万用表
示波器
有条件可以买实验室使用的示波器
条件稍微差点可以买虚拟示波器
SG90舵机
镊子、剪刀
直流电机和TB6612电机驱动模块
软件
Keil5 MDK:ARM系列的单片机编程
Keil5 C51:51系列单片机编程
安装Keil5 MDK
安装器件支持包
软件注册
安装STLINK驱动
安装USB转串口驱动
Keil5软件设置
设置字体大小
修改编码格式和缩进大小
- 修改为UTF-8格式防止中文乱码
- 修改缩进大小
建立工程
- STM32的开发方式主要有:
- 基于寄存器的方式:使用程序直接配置寄存器
- 基于标准库的方式:使用ST官方提供封装好的函数,通过调用函数间接配置寄存器(本次STM32学习的主要内容)
- 基于HAL库的方式:使用图形化界面快速配置STM32
固件库
- 在该目录下有一个STM32的固件库
- 解压后,点击文件夹
该文件夹下的
Libraries
的文件夹,里面就是库函数文件,之后建立工程的时候会用到Project
是官方提供的工程示例和模板,以后使用库函数的时候可以参考一下Utilities
是STM32官方评估板的相关流程,评估板是官方用STM32做的一个小电路板,用来测评STM32最后俩个文件,一个是库函数的发布文档,另一个是使用手册
- 发布文档有一些版本说明
- 使用手册用教怎么使用库函数
基于标准库的工程
- 建立存放工程的文件夹
- 接着打开Keil 5软件,点击创建一个新项目
- 然后将项目起一个名字保存在前面创建好的文件夹下,项目名称统一用
project
- 然后选择器件型号,注意
STM32F103C8
的下面有一个STM32F103CB
这两者要区分开来,然后点击OK即可
- 接下来会弹出新建工程小助手,但是暂时用不到,所以就把这个页面关了
- 然后就会看到如下图所示,但是目前还不能使用,还要配置一些必要的文件
- 打开文件夹,这个文件夹下就是STM32的启动文件,STM32就是从启动文件开始执行的
- 将这些文件复制下来,回到项目文件中,然后新建一个名为
start
的文件夹,将启动文件复制到该文件夹里面
- 然后回到该文件夹下,然后会看到
stm32f10x.h
:stm32的外设寄存器描述文件与51单片机的头文件一样,用来描述STM32有哪些寄存器和它对应的地址的system_stm32f10x.c
:主要用来配置时钟system_stm32f10x.h
:主要用来配置时钟- STM32主频72MHz,是system文件里面函数配置的
- 将这三个文件复制到
Start
文件夹下
- 接下来添加内核寄存器的描述文件,打开该文件夹,该文件夹下的这俩个文件就是内核的寄存器描述,还带了一些内核配置函数,这俩个文件也粘贴到
Start
文件下。工程的必要文件就复制完成了
回到Keil 5,将先前复制的文件添加到工程里面去
修改文件名为Start
- 点击右键,然后点击红框所示
- 然后添加
md.s
启动文件,启动文件只能添加1个,这里添加的启动文件是之后要使用的 - 然后将剩下的
.c
和.h
文件都添加进来
- 最后在工程选项里面添加头文件路径
- 检查配置文件是否可行
- 在项目文件中新建一个
User
的文件夹,main函数就放到该文件夹下
- 然后如下操作
- 修改名字为
User
- 点击添加新文件
- 注意下面第二个图片中的文件路径,main函数不会默认在User文件夹下,会在该文件夹的外面
- 然后插入头文件
- 然后编写如下代码,注意最后一行必须是空行
- 编写完之后点击下图红色框按钮,编译并建立工程
- 零错误,零警告,说明我们建立的工程是没有问题的
- 配置到这里就可以进行直接对寄存器的操作了
STM32操作
- 准备ST-Link、STM32的最小系统板和四根双母头的杜邦线
- 按照插针边上的标识,把3.3V、SWDIO、SWCLK、GND对应连接好
配置调试器
- 点击下图按钮
- 选择debug
- 调试器默认的是ULINK2,现在要选择ST-Link
- 设置ST-Link设置好后,点击右边的Settings
- 在设置中,点击Flash Download,然后将Reset and Run勾选上
- 这样下载程序之后会立马复位并执行
- 配置好后点击确定,OK然后重新编译程序
- 然后点击将程序下载到STM32里面
- 因为城程序里面什么都没有,所以这个灯就不会闪了
点亮STM32第一灯
- 需要配置3个寄存器,即可点灯
- RCC里面的ABP2ENR
- GPIOC里面的CRH
- GOIOC里面的ODR
1 |
|
添加库函数
- 在项目文件中添加一个
Library
的文件夹
- 打开固件库的文件夹
- 其中misc是内核的库函数
- 其他是内核外的外设库函数
- 全选复制,在前面刚创建的Library文件夹下复制
- 再打开固件库里面的inc文件夹
- 里面是库函数的头文件
- 继续全选复制到Library文件夹下
- 然后回到keil软件
- 在Target1里面Add Group
- 修改名字为
Library
然后再按右键添加已经存在的文件
- 将
Library
文件夹下所以文件都添加进去
- 但是现在还不能使用这些库函数,还需要配置一个文件打开文件,会看到下图
- stm32f10x_conf.h配置库函数头文件的包含关系,参数检查和函数定义,所有库函数都需要
- stm32f10x_it.c 这两个it文件是用来存放中断函数
- stm32f10x_it.h
- 将三个文件复制下来,粘贴到工程的User目录下
- 在Keil里面添加这三个文件
设置宏定义
- 打开头文件
- 下滑到文件结尾,看到如图语句
- 复制
USE_STDPERIPH_DRIVER
- 打开工程选项
- 在C/C++这边将复制的东西粘贴到Define里面
- 添加头文件路径,将创建在工程项目中的User和Library文件夹的路径添加到里面
移动文件
- 点击该红框按钮
- 将Library文件夹上移,使得Library和Start这两个不需要修改的内容的文件夹放在上面,User放在最下面
编译
- 点击下图红框按钮进行编译
- 第一次编译可能会比较慢
- 编译完后如果出现0错误,0警告说明工程建立成功
使用库函数点灯
- 使用RCC_APB2PeriphClockCmd控制时钟
注意
- 在启动文件里面有很多类型,具体选什么要根据芯片型号来选择
- 根据STM32中Flash和STM32的型号选择
- 如果是STM32F100,选择带VL的启动文件,根据Flash大小选择LD、MD、HD文件
- 如果使用STM32F101/102/103的型号,选择不带VL的,然后根据Flash大小选择LD、MD、HD还是XL
- 如果使用STM32F105/107,直接选择CL的启动文件
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!
评论