STM32F1系列HAL库配置GPIO
2022-07-01 来源:csdn
使用CUBEMX配置GPIO
此文以STM32F10FC8T6为例。
1.选择MCU
2.配置SYS
3.配置RCC,选择外部引脚
4. 配置引脚
注:
5.GPIO配置
1、输入模式
2、上下拉输入
IO上下拉配置
l No pull-up and no pull-down,浮空输入,配置为不上拉和下拉
l Pull-up,上拉输入
l Pull-down,下拉输入
3、端口重命名
1、引脚初始的电平
l Low:IO初始化默认输出低电平
l High:IO初始化默认输出高电平
2、输出模式
l Output Open Drain,开漏输出,可以输出低电平
l Output Push Pull,推挽输出,可以输出低电平和高电平
3、上下拉电阻
4、输出速度 高速/中速/低速
l Low,GPIO速度为低速,通常为2MHZ
l Medium,GPIO速度为中速,通常为10MHZ
l High,GPIO速度为高速,通常为50MHZ
5、端口重命名
6.时钟源设置
7.管理工程
8.生成工程
GPIO 相 关 的 函 数 和 定 义 分 布 在 HAL 库 文 件 stm32f1xx_hal_gpio.c 和 头 文 件
stm32f1xx_hal_gpio.h 文件中。
GPIO初始化
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
使用此函数对GPIO进行初始化。
宏定义
#define DONG_IN_1_Pin GPIO_PIN_3
#define DONG_IN_1_GPIO_Port GPIOA
初始化的一些常用格式
HAL库GPIO函数
1、功能:读取一个引脚的电平。
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,GPIO_PinState PinState)
参数:
GPIOx :其中x可以(A..G取决于所使用的设备)来选择GPIO外设
GPIO_Pin :指定要写入的端口位。此参数可以是GPIO_PIN_x之一,其中x可以是( 0..15 )。
PinState :指定要写入选定位的值。此参数可以是GPIO_PinState枚举值之一:
l GPIO_PIN_RESET:清除端口Pin,低电平
l GPIO_PIN_SET:设置端口Pin,高电平
示例:
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_RESET);
2、功能:写一个引脚的电平,可写高电平,也可以是低电平。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
参数:
GPIOx :其中x可以(A..G取决于所使用的设备)来选择GPIO外设
GPIO_Pin :指定要写入的端口位。此参数可以是GPIO_PIN_x之一,其中x可以是(0..15 )
返回:
typedef enum
{
GPIO_PIN_RESET = 0u,//低电平
GPIO_PIN_SET//高电平
} GPIO_PinState;
示例:HAL_GPIO_ReadPin (GPIOC, GPIO_Pin_5);
3、功能:翻转一个引脚的电平。
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
示例:HAL_GPIO_Togglepin(GPIOC, GPIO_Pin_5);
4、功能:引脚中断入口函数
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
5、功能: 引脚中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
注:在main.h中会出现如下宏定义
一些函数的封装
注:以下是关于按键扫描、一些有关LED的函数封装。
#include 'APP.h'
/*按键扫描*/
GPIO_PinState key_scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
{
if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==RESET)
{
HAL_Delay(20);
if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==RESET)
{
while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==RESET);
return GPIO_PIN_RESET;
}
else
return GPIO_PIN_RESET;
}
else
return GPIO_PIN_RESET;
}
/*LED的亮、灭、翻转*/
void led_on(void)
{
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
}
void led_off(void)
{
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
}
void led_toggle(void)
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
#ifndef __LED_H
#define __LED_H
#include 'main.h'
void led_on(void);
void led_off(void);
void led_toggle(void);
void led_bink(int8_t times);
#endif
其它
按键防抖
l 软件防抖可以检测到电平延时一段时间再确认电平,延时时间一般为10-20ms
l 硬件防抖可以在按键上并联一个电容,一般为0.1uf。
上一篇:STM32笔记——外部中断的配置
下一篇:STM32笔记——GPIO