STM学习- -库函数跑马灯实验
主要内容:
- LED外围电路,驱动管脚确认;
- 软体处理;
重点掌握内容:
- 管脚配置函数;
GPIO_InitTypeDef GPIO_InitStructure;
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; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
- 管脚输出状态控制函数;
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。
LED控制GPIO IO管脚及外围电路:
-
GPIO IO控制管脚确认:LED0对应PB5管脚,LED1对应PE5管脚
(PB5、PE5采用推挽输出)
-
加粗样式**LED为0805封装贴片红色LED 工作电压1.8~2.0V,额定电流20mA ,上拉R43、R44电阻值=(3.3V-2.0V)/15*1000=86R ;
/
软体处理:
-
库函数加载
-
GPIO 源文件stm32f10x_gpio.c 头文件stm32f10x_gpio.h加载
-
stm32f10x_rcc.h
-
misc.h
- 编写步骤
GPIO管脚初始化函数
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
作用:初始化一个或者多个IO口(同一组)的工作方式和速度。
该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的
时候有设置BSRR或者BRR寄存器
typedef struct
{
uint16_t GPIO_Pin; //指定要初始化的IO口
GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
GPIOMode_TypeDef GPIO_Mode; //设置工作模式:8种中的一个
}GPIO_InitTypeDef
注释:LED初始化:控制LED管脚GPIO 管脚定义 、输出类型、输出速率、输出初始状态
GPIO_Init函数初始化样例:
GPIO_InitTypeDef GPIO_InitStructure;
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; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
/
- GPIO输出电平函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。
管脚映射:
#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5
------------------------------------------------------------------------------------------------------
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入
注释:ODR 是一个端口输出数据寄存器,也只用了低 16 位。 IDR 是一个端口输入数据寄存器,也只用了低 16 位。