第7章 使用库函数点亮一个LED
1.LED模块硬件电路
2.GPIO库函数介绍
3.GPIO初始化步骤
1.LED模块硬件电路
2.GPIO库函数介绍
(1)GPIO外设的库文件:
stm32f4xx_gpio.c,stm32f4xx_gpio.h
(2)GPIO常用库函数
<1>初始化函数
void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)
功能:初始化一个或多个IO口(同一组端口)的工作模式,输出速度,输出类型,上下拉模式,即GPIO的4个配置寄存器。
打开库函数工程模板进行讲解。
初始化范例:
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //管脚设F9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHZ; //速度为100M
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化结构体
可以一次对多个管脚进行初始化,前提必须是它们的配置模式需一样。
比如:
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
<2>设置管脚输出电平函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:设置某个IO口为高电平(可同时设置同一端口的多个IO)。底层是通过配置BSRRL寄存器。
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:设置某个IO口为低电平(可同时设置同一端口的多个IO)。底层是通过配置BSRRH寄存器。
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
功能:设置端口管脚输出电平,很少使用。
<3>读取管脚输入电平函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:读取端口中的某个管脚输入电平。底层是通过读取IDR寄存器。
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
功能:读取某组端口的输入电平。底层是通过读取IDR寄存器。
<4>读取管脚输出电平函数
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:读取端口中的某个管脚输出电平。底层是通过读取ODR寄存器。
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
功能:读取某组端口的输出电平。底层是通过读取ODR寄存器
(3)使能GPIO时钟函数
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
不同的外设调用的时钟使能函数可能不一样
使能GPIO端口时钟:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
3.GPIO初始化步骤
(1)使能对应的GPIO端口时钟
(2)初始化GPIO
作业:
(1)使用工程模板点亮LED2。
(2)实现LED闪烁效果。
(3)实现LED流水灯效果。
以上具体输出函数可任意使用。