STM32_1 : STM32 基于库函数的GPIO配置

STM32 基于库函数的GPIO配置

一、配置步骤

  1. 创建一个初始化结构体
  2. 配置时钟并使能
  3. 配置需要使用的引脚
  4. 配置引脚的模式
  5. 配置引脚速度
  6. 初始化引脚所在的组

二、GPIO结构体配置

  1. GPIO_InitTypeDef GPIO_InitStructure; //创建名为 GPIO_InitStructure结构体
  2. RCC_APB1PeriphClockCmd(各GPIO口对应的时钟|各GPIO口对应时钟,是否使能); //使能时钟
  3. GPIO_InitStructure.GPIO_Pin=GPIO_PIN_引脚号; //配置需要使用的引脚
  4. GPIO_IniStructure.GPIO_Mode= ; //配置引脚模式
  5. GPIO_IniStructure.GPIO_SPEED= ; //配置引脚速度
  6. GPIO_Init(要初始化的GPIO口,&GPIO_InitStructure); //初始化引脚所在组

三、具体配置步骤

  1. 创建一个初始化结构体
    GPIO_InitTypeDef 结构体名称;
    多数习惯命名结构体为GPIO_InitStructure
    对于GPIO的初始化都是通过这个结构体的成员函数进行初始化,这样子可以简化初始化步骤

  2. 配置时钟并使能

    RCC_APB1PeriphClockCmd(各GPIO口对应的时钟|各GPIO口对应时钟,是否使能);

RCC_APB2PeriphClockCmd(各GPIO口对应的时钟|各GPIO口对应时钟,是否使能);
STM32有两种时钟
​ APB1外设时钟使能寄存器(RCC_APB1ENR) 低速APB使能,最大允许频率36MHz
​ APB2外设时钟使能寄存器(RCC_APB2ENR) 高速APB使能,最大允许频率72MHz

每一组GPIO下面都有16个口,比如说GIPOA下有0-15口

APB2TIM 1/8USART 1SPI 1GPIO A-ZADC 1-3EXTIAFIO
APB1TIM 2-7USART 2-5UART 4/5SPI2/I2SSPI3/I2SI2C 1/2IWDG
WWDGbxCANUSBBKPPWRDAC
  1. 配置需要使用的引脚

    GPIO_InitStructure.GPIO_Pin=GPIO_PIN_引脚号

    引脚号的设置根据配置时钟的GPIO时钟对应

    比如说:
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);//使能PB,PE端口时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0–>PB.5 端口配置

    这里只是设定了用第几个端口,但还没设置分组,分组将在最后一步

  2. 配置引脚的模式
    GPIO_IniStructure.GPIO_Mode=

    GPIO_Mode_IPU 上拉输入 GPIO_Mode_Out_PP 普通推挽输出

    GPIO_Mode_IPD 下拉输入 GPIO_Mode_Out_OD 普通开漏输出

    GPIO_Mode_IN_FLOATING 浮空输入 GPIO_Mode_AF_PP 复用推挽输出

    GPIO_Mod e_AIN 模拟输入模式 GPIO_Mode_AF_OD 复用开漏输出

    功能名称简述
    输入上拉输入(GPIO_Mode_IPU默认状态下(引脚无输入),读得的数据为1,高电平
    输入下拉输入(GPIO_Mode_IPD与上拉输入相反,默认为0,低电平
    输入浮空输入(GPIO_Mode_IN_FLOATING输入不确定,无上拉和下拉。输入阻抗较大,一般用于标准通信协议如I2CI2C、USART的接收端
    输入模拟输入模式(GPIO_Mod e_AIN一般由ADC采集电压信号时将其设置为模拟输入。
    输出普通推挽输出(GPIO_Mode_Out_PP输出电平为3.3V
    输出普通开漏输出(GPIO_Mode_Out_OD若要输出5V,则需外加上拉电阻,电源为5V。输出为高阻态时,由上拉电阻和电源向外输出5V的高电平
    输出复用推挽输出(GPIO_Mode_AF_PP引脚复用功能采用复用模式
    输出复用开漏输出(GPIO_Mode_AF_OD复用模式,且加入上拉电阻

    忘了在哪一个博客摘出来的了,如果我找回来就会在上面加上链接的

  3. 配置引脚的速度

    GPIO引脚速度有三种选择,分别是2MHz,10Mhz和50Mhz

    GPIO_IniStructure.GPIO_SPEED=

    GPIO_SPEED_2MHz 2MHz

    GPIO_SPEED_10MHz 10MHz

    GPIO_SPEED_50Mhz 50Mhz

  4. 初始化引脚所在的组
    GPIO_Init(要初始化的GPIO口,&GPIO初始化结构体);

    将初始化结构体的地址赋值给GPIO_Init,完成最后的初始化,这一句要放在最后
    此处将进行gpio口的分组,还记得第二步的时候初始化的一个端口的值,但是没有指明是哪一组的,现在在此处进行指明
    比如初始化GPIOB.5,则最后一句是这样的:

    GPIO_Init(GPIOB,GPIO_InitStructure);

全文到此结束

这文章写的不好,以后我温故而知新就更新它

特别是格式控制上做的不好,请谅解,这是我第一次用Typora写,然后导入,并且不是很熟悉md语法

要是觉得对你有帮助的话,点个赞收个藏吧,我会开心一整天的😀

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bug_Maker 八嘎创造者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值