STM32F1系列HAL库配置GPIO

目录

 使用CUBEMX配置GPIO

1.选择MCU

2.配置SYS

3.配置RCC,选择外部引脚

4. 配置引脚

5.GPIO配置 

6.时钟源设置 

7.管理工程

 8.生成工程

GPIO初始化

宏定义

初始化的一些常用格式

HAL库GPIO函数

一些函数的封装

 其它


 使用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。

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值