单片机
返回首页

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。

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章