STM32学习记录(一):STM32概述
STM32F10x系统结构图
STM32F10x的系统结构图如下[1]:

框图中名词解释,按A~Z的顺序排列:
- AHB(Advanced High performance Bus):先进高性能总线
- APB(Advanced Peripheral Bus):先进外设总线
- ADC(Analog-to-Digital Converter):模拟/数字转换器
- BKP(Backup registers):备份寄存器
- CAN(Controller Area Network):控制器局域网
- DAC(Digital-to-Analog Converter):数字/模拟转换器
- DCode (Data Code):数据总线
- DMA(Direct Memory Access):存储器直接访问
- Flash(Flash Memory):闪存
- FSMC(Flexible Static Memory Controller):可变静态存储控制器
- GPIO(General-purpose input/output):通用输入输出
- ICode (Insurtcution Code):指令总线
- I2C(Inter-Integrated Circuit):集成电路总线
- IWDG(Independent watchdog):独立看门狗
- NVIC(Nested Vectored Interrupt Controller):嵌套向量中断控制器
- RCC(Reset Clock Controller):复位时钟控制器
- RTC(Real-time clock):实时时钟
- System:系统总线
- SRAM(Static Random-Access Memory):静态随机存取存储器
- SDIO(Secure Digital Input and Output):安全数字输入和输出接口
- SPI(Serial Peripheral Interface):串行外围设备接口
- TIM(Timer):定时器
- USART(Universal Synchronous Asynchronous Receiver/Transmitter):通用同步异步收发器
- USB(Universal Serial Bus):通用串行总线
- WWDG(Window watchdog):窗口看门狗
Cortex-M3处理器内部有3个外设:[2]
- Nested vectored interrupt controller(NVIC),嵌套向量中断控制器(NVIC)是一种支持低延迟中断处理的嵌入式中断控制器。
- System control block(SCB),系统控制块(SCB)是处理器的程序员模型接口。它提供系统实现信息和系统控制,包括系统异常的配置、控制和报告。
- System timer(SysTick),系统定时器SysTick是一个24位向下计数的定时器。可以用作实时操作系统(RTOS)的滴答计时器或简单的计数器。
STM32F10x时钟树
参考另一篇博客:https://www.cnblogs.com/qianxiaohan/p/18278597
配置STM32编程环境
单片机型号: STM32F103C8T6
编程环境:
Keil μVision V5.24.2
VS Code 1.92
调试器Debugger: ST-Link V2
程序下载工具:STM32 ST-LINK Utility或Keil集成的程序下载工具
配置Keil环境
- 安装Keil MDK
- 安装芯片支持包,例如STM32F10x系列,双击
Keil.STM32F1xx_DFP.2.2.0.pack即可安装 - 使用注册机pojie软件
安装Keil MDK过程可参考:https://www.cnblogs.com/tb-chen/p/18079328
标准库
Keil 与 VS Code搭配使用
有两种方式:
- 安装插件
Keil Assistant,这个插件很方便,实际上就是把VS Code当做一个编辑器来用,VS Code的插件会调用Keil,将Keil的输出结果显示到VS Code的控制台。 - Arm官方提供了VS Code插件,安装Arm官方提供的插件
Arm Keil Studio Pack (MDK v6),我没有测试过。
Keil Assistant插件的安装以及使用教程:GitHub - github0null/keil-assistant
需要注意的是,比如要在项目的某文件夹下添加文件,需要在Keil中使用Manage Project Items选项将文件添加进项目中再编译项目,才不会出错。
创建项目
两种创建项目的方式:
-
自己创建一个模板STM32工程模板
-
使用Keil自带的
Run-Time Environment(RTE),添加所需文件。参考:https://blog.csdn.net/weixin_43764974/article/details/131754334
创建工程模板
以STM32F103C8T6为例。
下载标准库外设:https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html
模板将按照以下文件夹结构创建:
├─CMSIS //CMSIS:Cortex MicroController Software Interface Standard
├─Startup //stm32f10x启动文件,根据单片机配置选择不同的启动文件
├─StdPeriph_Driver //存放标准库外设的驱动文件
├─UserLib //存放用户自定义的库文件
└─User //主函数所在目录
将上述下载好的标准库文件stsw-stm32054_v3-6-0中的
CMSIS
1.将stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport路径下的以下文件:
core_cm3.ccore_cm3.h
复制到工程模板的CMSIS文件夹下。
2.将stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下的以下文件:
stm32f10x.hsystem_stm32f10x.csystem_stm32f10x.h
复制到工程模板的CMSIS文件夹下。
启动文件目录
将stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下的.s文件复制到Startup文件夹下
外设的驱动文件
将stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver下的inc和src文件夹复制到StdPre_Driver。
用户文件夹
这里存放的是用户需要自行修改的文件。
将stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template下的:
stm32f10x_conf.hstm32f10x_it.cstm32f10x_it.h
复制到User文件下。
在User文件夹下创建main.c
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
while (1)
{
}
}
在项目中创建和上述文件夹同名的分组,并将上面的文件添加到其中。注意:启动文件只需要添加一个.s文件
标准库工程模板结构
创建后的STM32F103C8T6标准库的工程模板,文件结构如下:
│ keilkill.bat //批处理文件,用于删除Objects文件夹下的文件
│ Project.uvoptx //保存keil μVision中的一些配置信息
│ Project.uvprojx //keil μVision工程文件
│
├─CMSIS //CMSIS:Cortex MicroController Software Interface Standard
│ core_cm3.c //这个C文件没有使用,可以移除
│ core_cm3.h //CMSIS Cortex-M3核心外设访问层头文件,包含了核心外设的寄存器地址定义如NVIC、SCB、SysTick
│ stm32f10x.h //CMSIS Cortex-M3 Device Peripheral Access Layer Header File.
│ system_stm32f10x.c //在其中定义了SystemInit、SystemCoreClock等等
│ system_stm32f10x.h //CMSIS Cortex-M3 Device Peripheral Access Layer System Header File.
│
├─DebugConfig //Keil μVision自动生成的文件夹,存放调试信息
├─Listings //Keil μVision自动生成的文件夹
├─Objects //Keil μVision自动生成的文件夹,存放编译后的文件
├─Startup //stm32f10x启动文件,根据单片机配置选择不同的启动文件
│ startup_stm32f10x_cl.s
│ startup_stm32f10x_hd.s
│ startup_stm32f10x_hd_vl.s
│ startup_stm32f10x_ld.s
│ startup_stm32f10x_ld_vl.s
│ startup_stm32f10x_md.s
│ startup_stm32f10x_md_vl.s
│ startup_stm32f10x_xl.s
│
├─StdPeriph_Driver //存放标准库外设的驱动文件
│ misc.c //此文件其余固件库函数
│ misc.h
│ stm32f10x_xxx.c //stm32f10x系列的外设标准库文件
│ stm32f10x_xxx.h
│
├─UserLib //存放用户自定义的库文件
└─User //这个文件夹的文件需要自行修改
main.c
stm32f10x_conf.h //配置文件,包含了所有标准库文件,如需使用标准库,需添加宏USE_STDPERIPH_DRIVER
stm32f10x_it.c //stm32f10x系列处理中断的文件
stm32f10x_it.h
标准库各个文件之间的关系:https://www.cnblogs.com/stm32-c/p/13874308.html
Keil中进行如下设置:
-
添加宏定义
STM32F10X_MD,USE_STDPERIPH_DRIVER-
添加
STM32F10X_MD才能使用某些常量,比如中断枚举常量IRQn -
添加
USE_STDPERIPH_DRIVER,才能使用头文件stm32f10x_conf.h,而stm32f10x_conf.h中包含了所有的标准外设库文件
-
-
添加
CMSIS、Startup、StdPeriph_Driver、UserLib、User这几个文件夹的路径,这样编译器在编译时就能找到对应的文件。路径要包含到文件的上一级目录。

编译器AC5和ADC6的选择
AC5编译器:
如果使用的是固件库STM32F10x_StdPeriph_Lib_V3.5.0中的core_cm3.h,固件库中的core_cm3.h版本太老,在keil中只能使用V5版本的编译器。
AC6编译器:
对于STM32F10x系列的单片机安装支持包Keil.STM32F1xx_DFP.2.2.0.pack后,core_cm3.h在Keil安装目录\ARM\PACK\ARM\CMSIS\5.0.1\CMSIS\Include。总共需要3个文件:core_cm3.h、cmsis_compiler.h、cmsis_armclang.h,这样在Keil中就可以选择AC6进行编译,但是就不能使用AC5进行编译了。
程序下载
在STM32F10xxx中,有3中引导模式:

BOOT1和BOOT0都接低电平,配置为从Flash Memory启动,网上买的最小系统板默认是从STM32中的Flash Memory中启动。
将编译后的程序下载到flash memory中,常见的Debugger有ST-Link,J-Link,CMSIS-DAP等等。ST-Link调试器参考:https://blog.csdn.net/qq_52102933/article/details/126830904,ST-Link也可使用STM32 ST-LINK Utility软件烧录HEX文件到单片机中。
HAL库
等待后续更新。。。
资料下载
标准库官网下载:https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html
STM32F103系列文档下载:https://www.st.com.cn/zh/microcontrollers-microprocessors/stm32f103/documentation.html
Keil MDK(含注册机、支持包)下载:https://pan.baidu.com/s/1l0RHFE2BJziakhdwaNUeUA?pwd=1234 提取码:1234
keil官网支持包下载:https://www.keil.arm.com/packs/stm32f1xx_dfp-keil/boards/

浙公网安备 33010602011771号