当前位置:首页 > C > 正文

C语言GPIO库使用教程(手把手教你用C语言控制树莓派和单片机的GPIO引脚)

在嵌入式开发中,GPIO(General Purpose Input/Output,通用输入输出)是最基础也是最重要的功能之一。无论是树莓派、Arduino 还是 STM32 等单片机,都需要通过 GPIO 来与外部硬件(如 LED、按钮、传感器等)进行交互。本教程将从零开始,教你如何使用 C语言GPIO库 来控制 GPIO 引脚,即使你是完全的新手也能轻松上手!

C语言GPIO库使用教程(手把手教你用C语言控制树莓派和单片机的GPIO引脚) C语言GPIO库 嵌入式开发 树莓派GPIO编程 单片机GPIO控制 第1张

什么是GPIO?

GPIO 是微控制器或单板计算机(如树莓派)上可编程的引脚,可以配置为输入(读取高低电平)或输出(输出高/低电平)。例如:

  • 输出模式:点亮一个 LED、驱动继电器
  • 输入模式:检测按钮是否按下、读取传感器状态

常用C语言GPIO库介绍

不同平台使用的 C 语言 GPIO 库略有不同:

  • 树莓派:常用 wiringPilibgpiod
  • STM32:使用 HAL 库或 LL 库
  • Linux 通用:可通过 sysfs 接口直接操作(无需额外库)

本文以树莓派 + wiringPi 库为例,讲解如何用 C 语言控制 GPIO。

环境准备

你需要:

  1. 一台已安装 Raspbian 系统的树莓派
  2. 一个 LED 和一个 220Ω 电阻
  3. 杜邦线若干
  4. 已安装 wiringPi 库(若未安装,请运行:sudo apt install wiringpi

接线说明

将 LED 的长脚(正极)通过 220Ω 电阻连接到树莓派的 GPIO18(物理引脚 12),短脚接地(GND,物理引脚 6)。

编写C语言代码控制LED

创建一个名为 blink.c 的文件,输入以下代码:

#include <wiringPi.h>#include <stdio.h>#include <unistd.h>#define LED_PIN 1  // wiringPi编号中,GPIO18对应编号为1int main(void) {    // 初始化wiringPi库    if (wiringPiSetup() == -1) {        printf("wiringPi初始化失败!\n");        return 1;    }    // 设置LED引脚为输出模式    pinMode(LED_PIN, OUTPUT);    printf("开始闪烁LED... 按Ctrl+C退出\n");    while (1) {        digitalWrite(LED_PIN, HIGH);  // 点亮LED        sleep(1);                     // 延时1秒        digitalWrite(LED_PIN, LOW);   // 熄灭LED        sleep(1);                     // 延时1秒    }    return 0;}

编译并运行程序

在终端中执行以下命令编译代码:

gcc -o blink blink.c -lwiringPi

然后运行程序:

sudo ./blink

你会看到 LED 每秒闪烁一次!按 Ctrl + C 可退出程序。

常见问题与注意事项

  • 务必使用 sudo 运行程序,否则可能因权限不足无法访问 GPIO
  • wiringPi 使用自己的引脚编号系统,不是 BCM 编号也不是物理引脚编号,注意对照文档
  • 新版本树莓派 OS 可能默认未安装 wiringPi,可手动从 GitHub 编译安装

拓展:读取按钮输入

除了输出,你也可以读取输入。例如,将按钮一端接 GPIO2(wiringPi 编号 8),另一端接地,并启用内部上拉电阻:

pinMode(8, INPUT);pullUpDnControl(8, PUD_UP);  // 启用上拉电阻if (digitalRead(8) == LOW) {    printf("按钮被按下!\n");}

总结

通过本教程,你已经掌握了如何使用 C语言GPIO库 控制树莓派的 GPIO 引脚,实现了 LED 闪烁的基本功能。这是 嵌入式开发 的第一步,也是通往更复杂项目(如智能家居、机器人控制)的基础。无论你是学习 树莓派GPIO编程 还是 单片机GPIO控制,理解 GPIO 的原理和操作方法都至关重要。

现在,动手试试吧!修改延时时间、增加多个 LED、加入按钮控制……你的创意没有限制!