STM32第三课(GPIO, HAL)

GPIO 相 关 的 函 数 和 定 义 分 布 在 HAL 库 文 件 stm32f4xx_hal_gpio.c 和 头 文 件
stm32f4xx_hal_gpio.h 文件中。

++++++++++++++++++++++++++++++++++
在 HAL 库开发中, 操作四个配置寄存器初始化 GPIO 是通过 GPIO 初始化函数完成:

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)

通常在cubemx中,会生成初始化代码,调用这个函数。

typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;
uint32_t Speed;
uint32_t Alternate;
}GPIO_InitTypeDef;

初始化 GPIO 的常用格式是:

GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10; //PF9,10
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOF,&GPIO_Initure);

在MDK 中是通过宏定义来定义的,我们只需要选择对应的宏即可:

#define GPIO_MODE_INPUT 0x00000000U
#define GPIO_MODE_OUTPUT_PP 0x00000001U
#define GPIO_MODE_OUTPUT_OD 0x00000011U
……省略部分宏定义
#define GPIO_MODE_EVT_RISING_FALLING 0x10320000U

#define GPIO_NOPULL 0x00000000U
#define GPIO_PULLUP 0x00000001U
#define GPIO_PULLDOWN 0x00000002U

#define GPIO_SPEED_FREQ_LOW 0x00000000U
#define GPIO_SPEED_FREQ_MEDIUM 0x00000001U
#define GPIO_SPEED_FREQ_HIGH 0x00000002U
#define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U

+++++++++++++++++++++++++++++++++++++++++++
在 HAL 库 中 设 置 ODR 寄 存 器 的 值 来 控 制 IO 口 的 输 出 状 态 是 通 过 函 数
HAL_GPIO_WritePin 来实现的:

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

实例如下:

HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);

+++++++++++++++++++++++++++++++++++++++++++
读取某个 IO 的电平,库函数相关函数为:

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

比如我们要读取 GPIOF.5 的输入电平,

HAL_GPIO_ReadPin (GPIOF, GPIO_Pin_5);

+++++++++++++++++++++++++++++++++++++++++++++
GPIO 相关的函数我们先讲解到这里。虽然 IO 操作步骤很简单,这里我们还是做个概括性
的总结,操作步骤为:
1) 使能 IO 口时钟。调用函数为__HAL_RCC_GPIOF_CLK_ENABLE();
2) 初始化 IO 参数。调用函数 HAL_GPIO_Init();
3) 操作 IO。

++++++++++++++++++++++++++++++++++++++++++++++
如果在cubemx中,为GPIO添加了user label,
那么在main.h中,就会出现类似于如下的宏定义:

#define beep_Pin GPIO_PIN_8
#define beep_GPIO_Port GPIOF
#define led1_Pin GPIO_PIN_9
#define led1_GPIO_Port GPIOF
#define led2_Pin GPIO_PIN_10
#define led2_GPIO_Port GPIOF

这样,我们就可以改写之前的代码,例如:

//HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(led1_GPIO_Port ,led1_Pin ,GPIO_PIN_SET);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值