STM32 GPIO
八种工作模式:
1、推挽输出 2、开漏输出 3、推挽式复用功能 4、开漏式复用功能
5、模拟输入(AD转换) 6、浮空输入 7、下拉输入 8、上拉输入
1、两个重要GPIO输出的HAL库函数:
1.1、GPIO电平输出HAL库函数:void HAL_GPIO_WritePin
void HAL_GPIO_WritePin(GPIO_TypeDef "GPIOx", uint16_t "GPIO_Pin", GPIO_PinState "PinState");
//HAL_GPIO_WritePin:电平输出函数名
对应参数:
/*1、GPIOX:目标引脚的引脚号
2、GPIO_PIN:目标引脚的引脚号
3、PinState:高电平---GPIO_PIN_SET==1 低电平:GPIO_PIN_RESET==0*/
例子:向PB8引脚输出低电平
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
1.2 、GPIO电平反转HAL库函数:void HAL_GPIO_TogglePin
void HAL_GPIO_TogglePin(GPIO_TypeDef "*GPIOx", uint16_t "GPIO_Pin");
//void HAL_GPIO_TogglePin:电平反转函数名
对应参数:
/*1、GPIOX:目标引脚的引脚号
2、GPIO_PIN:目标引脚的引脚号 */
例子:将PC13引脚输出电平反转
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
2、按键常用的HAL库函数:
2.1、GPIO 电平输入HAL库函数:GPIO_PinState HAL_GPIO_ReadPin
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef "*GPIOx", uint16_t "GPIO_Pin");
//GPIO_PinState HAL_GPIO_ReadPin:具有返回值的电平输入函数/返回 0或1
对应参数:
/*1、GPIOX:目标引脚的引脚号
2、GPIO_PIN:目标引脚的引脚号
3、高电平---GPIO_PIN_SET==1 低电平:GPIO_PIN_RESET==0*/
例子:/*示例按键控制LED灯的亮灭(通过A5端口按键控制A12端口LED的亮灭)*/
宏定义:
#define KEY1 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5) //宏定义按键KEY1(读取端口A5的输入电平)
#define KEY2 HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) // 宏定义按键KEY2(读取端口B10的输入电平)
延时函数:
void delay(unsigned int t) //延时函数
{
while (t--);
}
按键函数:
/*示例按键控制LED灯的亮灭(通过A5端口按键控制A12端口LED的亮灭)按下按键,切换LED1的开关状态。*/
void scan_Keys()
{
if (KEY1 == 0) // 判断A5端口此时的电平是不是为低电平
{
delay(1000); // 延时消抖
if (KEY1 == 0) // 再次判断判断A5端口此时的电平是不是为低电平
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_12); // 通过翻转函数执行A12端口电平翻转实现按键控制led亮灭
while (KEY1 == 0);
}
}
/*示例按键控制LED灯的亮灭(通过B10端口按键控制A11端口LED的亮灭)按下按键,松开后,切换LED2的开关状态。*/
if (KEY2 == 0) // 判断B10端口此时的电平是不是为低电平
{
delay(1000); // 延时消抖
if (KEY2 == 0) // 再次判断判断B10端口此时的电平是不是为低电平
{
while (KEY2 == 0); //按下时状态不变,松开后切换状态
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_11); //通过翻转函数执行A11端口电平翻转实现按键控制led亮灭
}
}
}