STM32F407ZGT6标准库学习——2-GPIO

目录

配置GPIO

1.开外设时钟

2.定义外设初始化结构体

3.配置结构体成员

4.调用初始化函数

GPIO函数

函数声明

函数解释

应用例子

led

按键及其检测


配置GPIO

配置GPIO一共分为四步

1.开外设时钟

想开启一个外设的时钟就需要知道它受哪个总线控制,那我们可以参考STM32F4xx参考手册,其中的2.3节为存储器映射,表2为寄存器边界地址,通过它我们可以知道GPIO外设全部挂载在AHB1总线上。代码如下;                        

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

2.定义外设初始化结构体

一般调用外设初始化函数中,需要先定义描述该外设配置参数的结构体,然后由初始化函数来根据结构体的变量参数配置外设,GPIO的结构体就可以在stm32f4xx_gpio.h中找到,名为GPIO_InitTypeDef

3.配置结构体成员

其中包含5个结构体变量

GPIO_Pin:需要配置的引脚,如果想同时配置多个引脚直接把变量直接用或连接即可

GPIO_Mode:模式选择,F4共有4个模式

                          GPIO_Mode_IN           输入模式
                          GPIO_Mode_OUT       输出模式
                          GPIO_Mode_AF          复用模式
                          GPIO_Mode_AN          模拟模式

GPIO_Speed:引脚的翻转速度——仅输出模式配置

GPIO_OType:输出类型,共有两个选项——仅输出模式配置

                          GPIO_OType_PP 推挽输出
                          GPIO_OType_OD 开漏输出

GPIO_PuPd:上下拉选项

                          GPIO_PuPd_NOPULL  浮空
                          GPIO_PuPd_UP           上拉
                          GPIO_PuPd_DOWN     下拉

4.调用初始化函数

标准库中,关于一个外设的所有函数一般都在其.h文件最后面

GPIO的初始化函数则为        GPIO_Init 第一个参数为GPIO选项,第二个参数为结构体指针

GPIO函数

函数声明

        /*  将GPIO配置设置为默认复位状态 ****/
void GPIO_DeInit(GPIO_TypeDef* GPIOx);

        /* 初始化和配置功能*/
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

        /* GPIO读写功能*/
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

        /* GPIO 备用功能配置功能*/
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);

函数解释

GPIO_DeInit :把GPIO配置为一个默认设置

GPIO_Init:按结构体初始化GPIO

GPIO_StructInit:把GPIO的结构体配置为默认设置

GPIO_PinLockConfig:锁住GPIO引脚配置寄存器

GPIO_ReadInputDataBit                        这四个函数为读取输入端口或输出端口的电平
GPIO_ReadInputData                             后缀有Bit的为一次读一位,没有的一次读16位
GPIO_ReadOutputDataBit
GPIO_ReadOutputData

GPIO_SetBits:使指定端口置位为1
GPIO_ResetBits:使指定端口复位为0
GPIO_WriteBit:配置一个端口高低电平
GPIO_Write:配置16个端口高低电平
GPIO_ToggleBits:翻转指定端口

GPIO_PinAFConfig:配置端口的复用功能

应用例子

led

void LED_GPIO_Init(void)
{
    /**
     * 外设初始化步骤:
     * 1.开外设时钟
     * 2.定义外设初始化结构体
     * 3.配置结构体成员
     * 4.调用初始化函数
    */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
    
    GPIO_InitTypeDef GPIO_Init_Structure;
    
    GPIO_Init_Structure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_Init_Structure.GPIO_OType = GPIO_OType_PP;
    GPIO_Init_Structure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_9;
    GPIO_Init_Structure.GPIO_PuPd = GPIO_PuPd_DOWN;
    GPIO_Init_Structure.GPIO_Speed = GPIO_Low_Speed;
    
    GPIO_Init(GPIOF,&GPIO_Init_Structure);
}

按键及其检测

void Key_GPIO_Init(void)
{
    /**
     * 外设初始化步骤:
     * 1.开外设时钟
     * 2.定义外设初始化结构体
     * 3.配置结构体成员
     * 4.调用初始化函数
    */    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    
    GPIO_InitTypeDef GPIO_Init_Structure;
    
    GPIO_Init_Structure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_Init_Structure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
    GPIO_Init_Structure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    
    GPIO_Init(GPIOE,&GPIO_Init_Structure);
}

uint8_t Key_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_pin)
{
    if(GPIO_ReadInputDataBit(GPIOx,GPIO_pin) == KEY_ON)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOx,GPIO_pin) == KEY_ON);
        Delay_ms(20);
        return KEY_ON;
    }
    if(GPIO_ReadInputDataBit(GPIOx,GPIO_pin) == KEY_OFF)
    {
        Delay_ms(20);
        while(GPIO_ReadInputDataBit(GPIOx,GPIO_pin) == KEY_OFF);
        Delay_ms(20);
        return KEY_OFF;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值