STM32学习笔记-GPIO使用总结

1 GPIO使用步骤
1.1. 使能GPIO对应的外设时钟
例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC , ENABLE);

1.2. 声明一个GPIO_InitStructure结构体

GPIO_InitTypeDef GPIO_InitStructure;​

1.3. 选择待设置的GPIO管脚
例如://选择待设置的GPIO第7、8、9管脚位 ,中间加“|”符号

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_8 | GPIO_Pin_9;

1.4. 设置选中GPIO管脚的速率
例如://设置选中GPIO管脚的速率为最高速率50MHz

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

1.5. 设置选中GPIO管脚的模式
例如://设置选中GPIO管脚的模式为开漏输出模式

GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_OD;//开漏输出模式

1.6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX
例如:

GPIO_Init(GPIOC,&GPIO_InitStructure);

1.7.其他应用

例: 将端口GPIOA的第10、15脚置1(高电平)

GPIO_SetBits(GPIOA,GPIO_Pin_10| GPIO_Pin_15);

例:将端口GPIOA的第10、15脚置0(低电平)

GPIO_ResetBits(GPIOA,GPIO_Pin_10| GPIO_Pin_15);

2. GPIO操作说明

2.1 库函数: 函数GPIO_DeInit

功能描述:将外设GPIOx寄存器重设为缺省值
例:

GPIO_DeInit(GPIOA);

2.2 函数GPIO_AFIODeInit

功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值
例:

GPIO_AFIODeInit();

2.3 函数GPIO_Init

功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器

例:

GPIO_InitTypeDefGPIO_InitStructure; 
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz; 
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;  
GPIO_Init(GPIOA,&GPIO_InitStructure);​

2.3.1 GPIO_InitTypeDefstructure

GPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”:

typedef struct  {​

u16GPIO_Pin;

GPIOSpeed_TypeDefGPIO_Speed;  

GPIOMode_TypeDefGPIO_Mode;
 

}GPIO_InitTypeDef;

2.3.2 GPIO_Pin

该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。可以使用下表中的任意组合。

GPIO_Pin_None:     无管脚被选中  

GPIO_Pin_x:          选中管脚x(0--15)

GPIO_Pin_All:        选中全部管脚

2.3.3 GPIO_Speed ​

用以设置选中管脚的速率。

GPIO_Speed_10MHz: 最高输出速率10MHz 

GPIO_Speed_2MHz:  最高输出速率2MHz

GPIO_Speed_50MHz: 最高输出速率50MHz

2.3.4 GPIO_Mode

用以设置选中管脚的工作状态。

GPIO_Mode_AIN:        模拟输入

GPIO_Mode_IN_FLOATING:    浮空输入  

GPIO_Mode_IPD:         下拉输入

GPIO_Mode_IPU:           上 拉输入

GPIO_Mode_Out_OD:           开漏输出

GPIO_Mode_Out_PP:            推挽输出 

GPIO_Mode_AF_OD:            复用开漏输出  

GPIO_Mode_AF_PP:            复用推挽输出

2.4 函数GPI

O_StructInit

功能描述:把GPIO_InitStruct中的每一个参数按缺省值填入 例:

GPIO_InitTypeDefGPIO_InitStructure;  

GPIO_StructInit(&GPIO_InitStructure); 

GPIO_InitStruct:

GPIO_Pin:GPIO_Pin_All  

GPIO_Speed:GPIO_Speed_2MHz 

GPIO_Mode:GPIO_Mode_IN_FLOATING

2.5 函数GPIO_ReadInputDataBit​

功能描述:读取指定端口管脚的输入

例:

u8ReadValue;

ReadValue= GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);

2.6 函数GPIO_ReadInputData

功能描述:读取指定的GPIO端口输入​

例:

u16ReadValue;

ReadValue= GPIO_ReadInputData(GPIOC);

2.7 函数GPIO_ReadOutputDataBit

功能描述:读取指定端口管脚的输出

例:

u8ReadValue;

ReadValue= GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7);

2.8 函数GPIO_ReadOutputData

功能描述:读取指定的GPIO端口输出

例:

u16ReadValue;

ReadValue= GPIO_ReadOutputData(GPIOC);

2.9 函数GPIO_SetBits

功能描述:置位指定的数据端口位

例: 将端口GPIOA的第10、15脚置1(高电平)

GPIO_SetBits(GPIOA,GPIO_Pin_10 | GPIO_Pin_15);

2.10 函数GPIO_ResetBits

功能描述:清除指定的数据端口位

例:将端口GPIOA的第10、15脚置0(低电平)

GPIO_ResetBits(GPIOA,GPIO_Pin_10 | GPIO_Pin_15);

2.11 函数GPIO_WriteBit

功能描述:设置或者清除指定的数据端口位

例:

GPIO_WriteBit(GPIOA,GPIO_Pin_15, Bit_SET);

2.12 函数GPIO_Write

功能描述:向指定GPIO数据端口写入数据

例:

GPIO_Write(GPIOA,0x1101);

2.13 函数GPIO_PinLockConfig

功能描述:锁定GPIO管脚设置寄存器

例:

GPIO_PinLockConfig(GPIOA,GPIO_Pin_0|GPIO_Pin_1);

2.14 函数GPIO_EventOutputConfig

功能描述:选择GPIO管脚用作事件输出 例:

GPIO_EventOutputConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);

GPIO_PortSource

GPIO_PortSource用以选择用作事件输出的GPIO端口。

2.15 函数GPIO_EventOutputCmd

功能描述:使能或者失能事件输出 例:

GPIO_EventOutputConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);
GPIO_EventOutputCmd(ENABLE);

2.16 函数GPIO_PinRemapConfig​

功能描述:改变指定管脚的映射例:

GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);

1

一.GPIO概述

共有8种模式

可以通过编程选择:

浮空输入

带上拉输入

带下拉输入

模拟输入

开漏输出——(此模式可实现hotpower说的真双向IO)

推挽输出

复用功能的推挽输出

复用功能的开漏输出
  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学习STM32F103的GPIO时,我记录了以下内容: 1. GPIO寄存器有32位,但是只用到了低16位,高16位是闲置的。GPIOA对应PA,GPIOB对应PB,GPIOC对应PC等。\[1\] 2. 控制GPIO的输出可以通过输出数据寄存器进行。可以通过写入数据寄存器的某一位来操作对应的端口。左边的位设置/清除寄存器可以单独操作某一位,而不影响其他位。在推挽输出模式下,P-Mos和N-Mos均有效,这种模式下具有较强的驱动能力,因此可以称为强推输出模式。\[2\] 3. 在设置GPIO的模式时,可以使用GPIO_InitStruct结构体来进行配置。例如,选择LED的引脚为B_LED_GPIO_PIN,将模式设置为推挽输出模式(GPIO_MODE_OUTPUT_PP),默认上拉(GPIO_PULLUP),引脚输出速度设置为慢(GPIO_SPEED_FREQ_LOW)。\[3\] 这些记录可以帮助你更好地理解和使用STM32F103的GPIO功能。 #### 引用[.reference_title] - *1* [STM32F103C8T6-GPIO学习笔记1](https://blog.csdn.net/xyh17858926692/article/details/126136176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【嵌入式学习-STM32F103-GPIO】](https://blog.csdn.net/weixin_43251807/article/details/129462844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32F103C8T6GPIO点灯](https://blog.csdn.net/weixin_43604457/article/details/123262236)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

炼金怪z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值