32单片机——GPIO配置步骤

1、使能时钟

__HAL_RCC_GPIOx_CLK_ENABLE(); //x:A~E

2、设置工作模式

HAL_GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

(1)形参1:GPIO_TypeDef *GPIOx是端口号(x:A~E)

(2) 形参2:GPIO_InitTypeDef *GPIO_Init是GPIO_InitTypeDef类型的结构体变量

typedef struct{

uint32_t Pin; /* 指定要配置的 GPIO 引脚。-------引脚号

此参数可以是 @ref GPIO_pins_define 的任何值 */

uint32_t Mode; /* 指定所选引脚的模式。-------模式设置

此参数可以是 @ref GPIO_mode_define 的值 */

uint32_t Pull; /* 指定所选引脚的 Pull-up 或 Pull-Down 激活。-------上拉下拉设置

此参数可以是 @ref GPIO_pull_define */

uint32_t Speed; /* 指定选定引脚的速度。-------速度设置

此参数可以是 @ref GPIO_speed_define 的值 */

} GPIO_InitTypeDef;

①Pin表示引脚号,范围:GPIO_PIN_0到GPIO_PIN_15,另外还有GPIO_PIN_All和GPIO_PIN_MASK可选

例如: LED0被PB5管脚控制,则为GPIO_PIN_5

②Mode是GPIO 的模式选择,有以下选择项:

#define GPIO_MODE_INPUT 0x00000000u /* 输入模式 */

#define GPIO_MODE_OUTPUT_PP 0x00000001u /* 推挽输出模式 */

#define GPIO_MODE_OUTPUT_OD 0x00000011u /* 开漏输出模式 */

#define GPIO_MODE_AF_PP 0x00000002u /* 推挽复用模式 */

#define GPIO_MODE_AF_OD 0x00000012u /* 开漏复用模式 */

#define GPIO_MODE_AF_INPUT GPIO_MODE_INPUT /* 模拟输入 */

③Pull用于配置上下拉电阻,有以下选择项:

#define GPIO_NOPULL 0x00000000u /* 无上下拉 */

#define GPIO_PULLUP 0x00000001u /* 上拉 */

#define GPIO_PULLDOWN 0x00000002u /* 下拉 */

④Speed用于配置GPIO的速度,有以下选择项:

#define GPIO_SPEED_FREQ_LOW (GPIO_CRL_MODE0_1) /* 低速 */

#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /* 中速 */

#define GPIO_SPEED_FREQ_HIGH (GPIO_CRL_MODE0) /* 高速 */

3、设置输出状态(可选)

(1)

HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

是GPIO口的写引脚函数

①形参1:端口号,可以选择范围:GPIOA~GPIOG

②形参2:引脚号,可以选择范围:GPIO_PIN_0~GPIO_PIN_15

③形参3:要设置输出的状态,有两个选择:GPIO_PIN_SET表示高电平,GPIO_PIN_RESET表示低电平

(2)

HAL_GPIO_TogglePin (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

是GPIO口的电平翻转函数

①形参1:端口号,可以选择范围:GPIOA~GPIOG

②形参2:引脚号,可以选择范围:GPIO_PIN_0~GPIO_PIN_15

4、读取输入状态(可选)

HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

是GPIO口的读引脚函数

(1)形参1:端口号,可以选择范围:GPIOA~GPIOG

(2)形参2:引脚号,可以选择范围:GPIO_PIN_0到GPIO_PIN_15

5、以led初始化为例

void led_init(void){

GPIO_InitTypeDef g_gppio_struct;

__HAL_RCC_GPIOE_CLK_ENABLE(); //使能时钟--PE5--LED1

__HAL_RCC_GPIOB_CLK_ENABLE(); //使能时钟--PB5--LED0

g_gppio_struct.Pin=GPIO_PIN_5;

g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出

g_gppio_struct.Pull=GPIO_NOPULL; //无上下拉

g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH; //高速

HAL_GPIO_Init(GPIOE,&g_gppio_struct); //初始化LED1

g_gppio_struct.Pin=GPIO_PIN_5;

g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出

g_gppio_struct.Pull=GPIO_NOPULL; //无上下拉

g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH; //高速

HAL_GPIO_Init(GPIOB,&g_gppio_struct); //初始化LED0

}

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘3 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
zd8451015004 天前
RS485 总线详解
单片机·嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘4 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展4 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司4 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑4 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
意法半导体STM324 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发
雾削木4 天前
B语言经典教程现代化重构
java·前端·stm32·单片机·嵌入式硬件
Hello-FPGA4 天前
Camera Link 与 CoaXPress 技术对比 如何选择你的相机接口
单片机·嵌入式硬件
项目題供诗4 天前
STM32-USART串口协议(二十二)
stm32·单片机·嵌入式硬件