Skip to content

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 中的

#ifdef USE_STDPERIPH_DRIVER
  #include "stm32f10x_conf.h"
#endif

因此需要定义 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){

    }

}