本笔记是记录b站江协科技的STM32入门教程的学习过程遇到的问题以及解决方法
文章目录
-
- 1、STM32介绍
- 2、软件准备
- 3、新建工程
-
- 1、首先建立一个文件夹STM(自定义取名,可取项目名称,最好是英文)
- [2、打开 keil 软件,顶头位置 找到 **Project**,点开后选择第一个**New μVision Project**](#2、打开 keil 软件,顶头位置 找到 Project,点开后选择第一个New μVision Project)
- [3、双击选择刚刚建立的文件夹,并在弹出的 窗口下方 **文件名** 填上工程名称](#3、双击选择刚刚建立的文件夹,并在弹出的 窗口下方 文件名 填上工程名称)
- 4、选择芯片型号**STM32F103C8**系列(使用的是**STM32F103C8T6**)
- 5、在文件夹内创建**Start**(用来移植启动文件)、**Library**(用来存放库函数文件)
- 6、移植**启动文件**
- 7、单击文件名称,稍等一会,然后修改为**Start**
- 8、将刚刚复制的内容添加**Start**文件夹中
- 9.添加启动文件的头文件路径,先点击"魔法棒"
- 10、创建用户文件夹,并添加到工程文件夹中
- 11、在User文件下,创建main函数
- 12、写一个while循环来测试是否成功创建
- 13、创建外设标准库文件夹
- 14、添加外设库函数文件和
- 15、在工程中添加库函数文件
- 16、让库函数跑起来
- 一些有用的设置
- 4、连线准备
1、STM32介绍
ARM既是ARM公司,也是ARM处理器内核
ARM公司设计ARM内核,半导体厂商完善内核及其周边电路并生产芯片
ARM有三个系列:A系列(手机芯片)、R系列、M系列(苹果电脑芯片)
STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。其中,ST 是公司名称,M是微控制器Microcont的首字母。
STM32拥有四个系列:高性能系列(High performance)、主流系列(Mainstream)、超低功耗系列(Ultra-low-power)、无线系列(Wireless)。
下表是STM32外设英文缩写:
| 英文缩写 | 名称 | 英文缩写 | 名称 |
|---|---|---|---|
| NVIC | 嵌套向量中断器 | CAN | CAN通信 |
| SysTick | 系统滴答定时器 | USB | USB通信 |
| RCC | 复位和时钟控制 | RTC | 实时时钟 |
| GPIO | 通用IO口 | CRC | CRC校验 |
| AFIO | 复用IO口 | PWR | 电源控制 |
| EXTI | 外部中断 | BKP | 备份寄存器 |
| TIM | 定时器 | IWDG | 独立看门狗 |
| ADC | 模数转换器 | WWDG | 窗口看门狗 |
| DMA | 直接内存访问 | DAC | 数模转换器 |
| USART | 同步/异步串口通信 | SDIO | SD卡接口 |
| I2C | I2C通信 | FSMC | 可变静态存储控制器 |
| SPI | SPI通信 | USB OTG | USB主机接口 |
STM32命名规则:
| 产品系列 | 类型 | 子类型 | 引脚数目 | 闪存存储器容量 | 封装 | 温度范围 |
|---|---|---|---|---|---|---|
| STM32 | F | 103 | C | 8 | T | 6 |
| 基于ARM核心的32位微控制器 | F=通用类型 | 101=基本型 102=USB基本型,USB 2.0全速设备 103=增强型 105或107=互联型 | T=36 C=48 R=64 V=100 Z=144 | 4=16K 6=32K 8=64K B=128K C=256K D=384K E=512K | H=BGA T=LQFP U=VFQFPN Y=WLCSP64 | 6=-40℃~85℃ 7=-40℃~105℃ |
2、软件准备
下载keil5 MDK
下载keil5 软件并激活
串口驱动STM32 STlink安装
usb转串口驱动
3、新建工程
1、首先建立一个文件夹STM(自定义取名,可取项目名称,最好是英文)

2、打开 keil 软件,顶头位置 找到 Project ,点开后选择第一个New μVision Project

3、双击选择刚刚建立的文件夹,并在弹出的 窗口下方 文件名 填上工程名称

4、选择芯片型号STM32F103C8 系列(使用的是STM32F103C8T6)

5、在文件夹内创建Start (用来移植启动文件)、Library(用来存放库函数文件)

6、移植启动文件

启动文件的路径1:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

路径2:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
其中:stm32f10x.h是外设寄存器描述文件、system_stm32f10x.c/h是时钟配置文件

路径3:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
注意:core_cm3.h/c 是内核寄存器描述
7、单击文件名称,稍等一会,然后修改为Start

8、将刚刚复制的内容添加Start文件夹中

注意:选择的文件有这些"core_cm3.c" "core_cm3.h" "startup_stm32f10x_md.s" "stm32f10x.h" "system_stm32f10x.c" "system_stm32f10x.h"
启动文件选择md的原因如下图:后续要根据自己的型号选择

小钥匙表示该文件是只读文件,无法修改
9.添加启动文件的头文件路径,先点击"魔法棒"

选择C/C++

点击这个Include Paths后面的三个点

继续点击虚线方形标志(添加)

点击三个点,添加路径

选择Start文件,然后点确定,Ok

最后应该是这个样子

10、创建用户文件夹,并添加到工程文件夹中

11、在User文件下,创建main函数

注意修改文件路径
12、写一个while循环来测试是否成功创建

鼠标右键可以直接插入头文件

代码:
#include "stm32f10x.h" // Device header
int main(void)
{
whlie(1)
{
}
}
点击运行:

当出现0 Error 和0 Warning时,表示成功建立!

13、创建外设标准库文件夹
在自己的项目工程里创建一个名为Library 的文件夹,并在工程中创建Library

14、添加外设库函数文件和
按照图片中的路径,分别找到对应的子文件夹
路径1:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src

路径2:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc

将两个文件夹内所有的文件移植到到刚刚创建的Library文件夹中

其中misc.c是内核的库文件
13、给User继续移植库函数
进入路径STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template中,并找到这三个文件,将文件移植到自己工程的User文件夹下

conf.h是用来配置库函数头文件的包含关系的
两个it文件是用来存放中断函数的
15、在工程中添加库函数文件
首先添加Library的库函数文件,如图所示添加即可

然后继续添加User的库函数

16、让库函数跑起来
点开魔术棒 ,在C/C++栏目中的Define 添加这一句USE_STDPERIPH_DRIVER(添加后才能正常使用库函数)

同时,在C/C++栏下的Include Paths添加文件路径

最后点击ok就行
点击运行,当出现**0 Error(s), 0 Warning(s)**时,证明移植成功

-
下面讲解如何查找
USE_STDPERIPH_DRIVER- USE使用、下划线、STD标准、PERIPH外设、下划线、DRIVER驱动
在main主函数中,右键点击头文件

鼠标翻转到图片位置,有一个定义,就是那串函数的位置了

一些有用的设置
注意:记得查看魔法棒 中,Target 栏下ARM Compiler选择版本5

配置中文语言显示:
- 点击扳手工具

- 在Encoding 中选择UTF-8 ,这样可以防止中文出现乱码问题(倘若使用别的代码时,中文乱码,就需要在这里调整为GB2312)

配置调试器:
- 在魔法棒中,选择Debug ,在Use选择ST-Link Debugger(我们主要是使用ST-Link烧录)

- 同时,点击后面的Settings ,在Flash Download 中勾选Reset and Run(这样方便我们下载程序完毕后,自动运行)

4、连线准备
ST-Link与STM32F103C8T6接线如下表
| ST-Link | STM32F103C8T6 |
|---|---|
| SWDIO | DIO |
| GND | GND |
| SWCLK | DCLK |
| 3.3V | 3.3 |
感谢耐心看完!