GPIO的基本功能

文章目录

    • GPIO(通用I/O)
    • GPIO控制函数
      • HAL_GPIO_WritePin
      • HAL_GPIO_ReadPin
      • HAL_GPIO_TogglePin
    • 按下按键点亮LED
      • 编写代码
    • Cube生成的文件结构
    • 参考资料

GPIO(通用I/O)

  • 通用输入输出接口

  • 可以输入输出数字信号

  • STM32的GPIO每16个一组(Port),分为ABCD等

    • 例如PA0代表这是A组的第0个GPIO(Port-A Pin-0)
  • STM32的每一个不是电源或复位相关的引脚都可以用作GPIO

  • STM32的GPIO输出高电平是3.3V,输入一般可以最高承受5.25V

    • 有例外,F103的很多引脚只能承受最高3.6V

GPIO控制函数

HAL_GPIO_WritePin

void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
    //参数一般两到三个
    //第一个gpio的port,
    //例如pa0的pa
    //第二个参数是pin,例如pa0的0,不能单纯敲数字,必须使用宏定义编号,
    //例如:GPIO_PIN_0
    //可以将不同的pin按位或在一起使用,
    //例如:GPIO_Pin_1 | GPIO_Pin_2会同时操作pin1和pin2
    //第三个参数表示写入的是高电平还是低电平

作用:写一个高电平或者低电平

HAL_GPIO_ReadPin

GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)

作用:读取一个GPIO的电平

HAL_GPIO_TogglePin

void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)

作用:翻转一下电平

按下按键点亮LED

首先进行各种外设的配置

其次参考芯片原理图把LED_R的引脚PH12S配置成GPIO_Output

然后回到原理图找到按键

在这里插入图片描述

原理图表示按下按键后,它会变成低电平,松开后就会变成高电平
在这里插入图片描述

看到key连接在PA0引脚

回到cube中把PA0配置成输入(GPIO_Input)

这样就把外设配置完毕然后命名生成MDK-ARM文件

编写代码

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
if (HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_Pin_SET)
{
   HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_RESET);
}
else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_Pin_RESET)
{
    HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET);    
}
      HAL_Delay(100);
  /* USER CODE END 3 */
}
//HAL_GPIO_ReadPin(GPIOA,GPIO_Pin_0) 代表读进来是pa0的电平
//GPIO_Pin_SET是一个枚举类型变量,代表高电平,即按键没有按下
//按键没有按下时把LED灯输出低电平,即灭灯
//在whlie(1)中加入HAL_Delay防止程序一直判断条件语句增加CPU负担

编写好代码后进行编译与烧录

最后实现效果为按下按键后红灯亮起,按键没有按下时灯灭。

Cube生成的文件结构

  • main.c:程序入口
  • main.h:主头文件
    • 其他程序文件只需包含这个头文件即可使用HAL库
  • gpio.c/gpio.h: GPIO初始化函数
    • 类似的,其他外设也会有对应的.c和.h
    • 其他程序文件最好不要包含外设.h(可能会造成不兼容问题)
    • 尽量使用main.h或者stm32xx_hal.h
  • 只有 USER CODE BEGIN 和 USER CODE END 注释中间的内容是可编辑的,
  • 其他内容编辑后再重新生成工程会被覆盖

参考资料

CH1.2 GPIO 第2讲 GPIO的基本功能【南工骁鹰嵌入式软件培训】

<think>好的,用户想了解GPIO驱动的基本功能和详细说明。首先,我需要回忆GPIO的相关知识,并结合提供的引用内容来组织答案。 首先,GPIO是通用输入输出端口,用于连接和控制外部设备。根据引用[1],STM32GPIO可以驱动LED和接收按键输入,这说明基本功能包括输出和输入模式。输出模式下,可以控制高低电平,比如点亮LED;输入模式则用于读取外部信号,如按键状态。 接下来,引用[2]提到了描述符-based的API,比如gpiod_set_value,这说明现代Linux驱动使用这些接口来操作GPIO,需要提到API的使用和优势,比如更安全、易管理。而引用[3]中的命令行操作,比如echo到export,展示了如何通过sysfs来操作GPIO,这也是基本功能的一部分,特别是用户空间的访问方法。 需要分点说明基本功能,可能包括输入输出模式、驱动能力、中断处理、配置选项等。同时,结合引用内容中的例子,如LED和按键,作为应用场景。还要注意区分不同系统下的实现,比如STM32和Linux,但用户可能关心的是通用功能,所以需要综合说明。 另外,用户可能想知道GPIO驱动在嵌入式系统中的作用,比如如何配置引脚模式(推挽、开漏等),以及上拉/下拉电阻的设置。引用中提到的API和命令行方法,可以作为配置方式的例子。需要确保涵盖初始化、设置方向、读写操作等步骤,并解释相关术语,如推挽输出和开漏输出的区别。 还要注意用户可能的深层需求,比如如何在实际项目中应用GPIO驱动,或者调试时的问题。不过根据问题,主要需要详细说明基本功能,所以应聚焦于此。最后,生成相关问题时要围绕GPIO的应用、配置、API使用等,帮助用户进一步学习。</think>### GPIO驱动基本功能详细说明 GPIO(通用输入输出)是嵌入式系统中用于连接外部设备的通用接口,其驱动核心功能可分为以下部分: #### 一、基本工作模式 1. **输入模式** - 读取外部信号状态(高/低电平),例如检测按键状态(引用[1]) - 支持浮空/上拉/下拉电阻配置,如按键检测时常用内部上拉电阻 - 典型应用:$V_{in} > 2.0V$ 识别为高电平,$V_{in} < 0.8V$ 识别为低电平 2. **输出模式** - 控制引脚电平状态(置高/置低),如驱动LED灯(引用[1]) - 支持推挽/开漏输出模式: $$ V_{out} = \begin{cases} V_{DD} & \text{推挽高电平} \\ 0V & \text{推挽低电平} \end{cases} $$ #### 二、驱动能力配置 | 参数 | 典型值 | 说明 | |------------|------------|--------------------------| | 驱动电流 | 8-20mA | 决定可驱动负载大小 | | 翻转速率 | 2-100MHz | 影响信号边沿陡峭程度 | | 电压范围 | 1.8-5.5V | 不同芯片支持的电压标准不同| #### 三、中断功能 - 支持边沿触发(上升沿/下降沿/双边沿) - 支持电平触发(高电平/低电平) - 中断响应时间通常小于$1\mu s$ #### 四、配置接口 现代Linux系统推荐使用描述符-based API(引用[2]): ```c // 获取GPIO描述符 struct gpio_desc *desc = gpiod_get(dev, "led", GPIOD_OUT_HIGH); // 设置输出电平 gpiod_set_value(desc, 0); // 输出低电平 // 方向切换 gpiod_direction_input(desc); ``` #### 五、用户空间访问 通过sysfs接口操作(引用[3]): ```bash # 导出GPIO10 echo 10 > /sys/class/gpio/export # 设置输出方向 echo out > /sys/class/gpio/gpio10/direction # 输出高电平 echo 1 > /sys/class/gpio/gpio10/value ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书阁下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值