使用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
推荐阅读最新更新时间:2024-11-12 10:13
设计资源 培训 开发板 精华推荐
- DC9018B-C,SmartMesh WirelessHART RF 认证开发板 + MMCX 天线连接器
- DRV8870&AT8221
- LT1108CN8-12 5V 至-5V 转换器的典型应用电路
- 用于智能电表的 10W、25V 交流转直流单路输出电源
- FE1.1S_USB2.0_HUB_4P
- LT6656BCDC-1.25、1.25V ADC 电压基准和桥式激励电源的典型应用
- DC1178A,用于 LT5568-2EUF、900MHz GSM/EDGE 优化 I/Q 调制器的演示板
- DC1018B-C,用于具有闩锁功能的 LT4356-3 过压保护稳压器的演示板
- 无镇流器的 LT3091MPFE 并联器件的典型应用(50mA 最小负载)
- [实测通过]IP6538双路带快充功能的移动设备充电适配器