STM32 入门 1
相关参数
STM32F103C8T6
RAM:20K(存储介质SRAM)运行内存
ROM:64K(Flash闪存)程序存储器
供电:2.0~3.6V
片上资源/外设(Peripherals)
NVIC 嵌套向量中断控制器
SysTick 系统滴答定时器
含义拆解
STM32 基于ARM核心的32位微控制器
F 通用类型
103 增强型
C 引脚数目 48
8 Flash闪存容量 64K
T 封装类型 LQFP
6 温度范围 -40 到 85 摄氏度
引脚定义
最小系统电路
配置环境
Keil5 MDK 针对 ARM 架构的开发软件,需要安装支持包
安装 STLink 驱动(STLink是一种调试器),JLink也是一种常用调试器,可以在 Keil 安装目录下找到安装程序
安装 CH340 驱动,USB 转串口
建立工程
开发方式:基于寄存器的方式、基于库函数的方式、基于 HAL 库的方式
本课程基于库函数,因此需要固件库
新建工程以后,需要添加工程的必要文件
STM32 启动文件存放在 STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 文件夹下
把上述文件夹下的启动文件存放到工程的 Start 文件夹下
再把 STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下三个代码文件
- stm32f10x.h STM32 外设寄存器描述文件
- system_ 开头的文件用来配置时钟
这三个文件同样粘贴到 Start 文件夹下
STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 中的两个代码文件是内核寄存器描述文件,同样粘贴到 Start 文件夹下
回到 Keil,把 Source Group 改成 Start,右键添加文件到 Start,选择 All files,首先看启动文件,视频所用型号对应 _md.s 结尾的启动文件,再把剩余的 .c 和 .h 文件全部添加
最后在工程选项添加文件夹的头文件路径,否则找不到头文件,点击魔术棒按钮,找到 C/C++,找到 Include Paths,新建路径,添加 Start 路径
在工程文件夹新建 User 文件夹,同理在 Target 下面添加 User 组,添加 main.c 文件,不要忘记选择路径到 User 文件夹
右键可以插入头文件,添加 main 函数,编译并建立工程
通过配置寄存器来完成点灯
配置 STLink,在 Target 配置中选择 Debug,选择 ST-Link Debugger,再选选项旁边的设置按钮,Flash Download 中的 Reset and Run 选中
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR = 0x00000010;
GPIOC->CRH=0x00300000;
GPIOC->ODR=0x00002000;
while(1){
}
return 0;
}
添加库函数
项目中新建文件夹 Library,把 STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src 中的文件复制到其中,同时再把 STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc 中的头文件粘贴到其中
回到 Keil,添加组 Library,添加上述所有文件到组
然后还需要 STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下的 stm32f10x_conf.h 和两个 _it 结尾的文件粘贴到 User 目录下,在组里添加这三个文件
最后还需要宏定义,来源于 stm32f10x.h 中的
因此需要定义 USE_STDPERIPH_DRIVER
打开工程选项,在 C/C++ 的 Define 栏目粘贴该字符串,同时 Include Paths 不要忘记添加 User 和 Library 文件夹,另外还可以通过三个小箱子的按钮把 Library 文件夹上移,看起来舒服一些
用库函数点灯
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //clock
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_SetBits(GPIOC,GPIO_Pin_13); //高电平
//GPIO_ResetBits(GPIOC,GPIO_Pin_13); //低电平
while(1){
}
}