stm32
stm32学习笔记
一、工程文件的建立
1.1 全局变量的定义 STM32F10X_HD,USE_STDPERIPH_DRIVER
1.2 目录结构
文件夹 | 文件 | 作用 |
---|---|---|
USER | main.c | 主程序 |
stm32f10x_it.c | 定义部分中断服务程序 | |
system_stm32f10x.c | 主要定义SystemIinit等时钟初始化函数 | |
HARDWARE | 驱动文件 | |
SYSTEM | 常用公共代码 | |
CORE | core_cm3.c | 固件库核心文件 |
startup_stm32f10x_hd.s | 启动文件 | |
FWLIB | 库文件 |
二、跑马灯实验
2.1 GPIO固件库
stm32f10x_gpio.h
stm32f10x_gpio.c
2.2 IO配置的8种模式
-
输入浮空
-
输入上拉
-
输入下拉
-
模拟输入
-
开漏输出
只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)
- 推挽输出
可以输出强高低电平,连接数字器件
-
推挽式复用功能
-
开漏复用功能
2.3 每个IO端口(16)由七个寄存器控制
- 配置模式的 2 个 32 位的端口配置寄存器
CRL
和CRH
- 2 个 32 位的数据寄存器
IDR
和ODR
- 1 个 32 位的置位/复位寄存器
BSRR
-
1个 16 位的清除寄存器
BRR
-
1 个 32 位的锁存寄存器
LCKR
2.4 GPIO库常用函数介绍
GPIOx: GPIOA~GPIOG
typedef struct
{
uint16_t GPIO_Pin; //指定要初始化的IO口
GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
GPIOMode_TypeDef GPIO_Mode; //设置工作模式:8种中的一个
}GPIO_InitTypeDef;
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
作用:初始化一个或者多个IO口(同一组)的工作方式和速度
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。(一个读1位 / 一个读16位)
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。(一个读1位 / 一个读16位)
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。
2.5 跑马灯端口初始化例程
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //PB.5 输出高
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高
}
2.6 寄存器地址名称映射
- 定义外设基地址,以此为基础,不断偏移以定位寄存器组
GPIO_TypeDef