STM32_HAL库GPIO操作指令(基于CubeMX软件)

发布于 2024-02-21  35 次阅读


GPIO写入操作

//未在CubeMX内编辑IO口定义情况
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
//第一位写入GPIO分类,第二位写入GPIOpin口,第三位为高低电平(GPIO_PIN_SET为高电
//平GPIO_PIN_RESET为低电平)

//在CubeMX内编辑IO口定义情况
HAL_GPIO_WritePin("端口定义名称"_GPIO_Port, "端口定义名称"_Pin, GPIO_PIN_SET);
//写入格式为定义名称+_GPIO_Port&Pin.
//例如HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);

GPIO读取操作

//未在CubeMX内编辑IO口定义情况
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

//在CubeMX内编辑IO口定义情况
HAL_GPIO_ReadPin("端口定义名称"_GPIO_Port, "端口定义名称"_Pin);
//例如HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin);

//ReadPin指令返回值为GPIO_PIN_SET&GPIO_PIN_RESET


//判断GPIO示例程序
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, LED_Pin)==GPIO_PIN_RESTE){
     HAL_GPIO_WritePin(LED_GPIO_Port,LED_GPIO_Pin,GPIO_PIN_SET);
}else{
     HAL_GPIO_WritePin(LED_GPIO_Port,LED_GPIO_Pin,GPIO_PIN_RESET);
}//判断按键是否按下使LED灯实现按下点亮松开熄灭

GPIO电平翻转指令

HAL_GPIO_TogglePin(KEY_GPIO_Port, KEY_Pin);
//实现GPIO电平反转1=>0,0=>1

//示例1无消抖
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, LED_Pin)==GPIO_PIN_RESTE)
{
     HAL_GPIO_TogglePin(LED_GPIO_Port,LED_GPIO_Pin);
     //当KEY按下时LED电平反转
     while(HAL_GPIO_ReadPin(KEY_GPIO_Port, LED_Pin)==GPIO_PIN_RESTE)
     //检测KEY是否松开,松开则打破循环
}

//示例2有消抖
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, LED_Pin)==GPIO_PIN_RESTE)
{
     HAL_Delay(10);
     //等待10ms
     if (HAL_GPIO_ReadPin(KEY_GPIO_Port, LED_Pin)==GPIO_PIN_RESTE)
     //检测10ms消抖后按键是否仍为按下状态
       {
       HAL_GPIO_TogglePin(LED_GPIO_Port,LED_GPIO_Pin);
       //当KEY按下时LED电平反转
       while(HAL_GPIO_ReadPin(KEY_GPIO_Port, LED_Pin)==GPIO_PIN_RESTE)
       //检测KEY是否松开,松开则打破循环
       }
}
届ける言葉を今は育ててる
最后更新于 2024-02-21