学习开发板的第一步,必然是先点灯(当然,你也可以点亮一个电阻,点亮一个u,至于没人说你,除了钱包)
点灯前,我们要做好
配置开发环境——需要从幸狐的网上下好交叉编译工具
写入一个系统——需要从幸狐的网上下好系统并写入,本次使用buildroot
首先,我们在开发环境创建个文件ledlearn.c
然后文件如下
代码结构
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>头文件
stdio.h: 标准输入输出函数stdlib.h: 标准库函数unistd.h: 提供sleep等系统调用
主函数
int main() {
int gpio_pin;
// 获取用户输入的GPIO引脚号
printf("Please enter the GPIO pin number: ");
scanf("%d", &gpio_pin);这个我不必多做解释了
1. 导出GPIO引脚
// 打开GPIO导出文件
FILE *export_file = fopen("/sys/class/gpio/export", "w");
if (export_file == NULL) {
perror("Failed to open GPIO export file");
return -1;
}
// 写入要导出的GPIO引脚号
fprintf(export_file, "%d", gpio_pin);
fclose(export_file);这个是导出引脚,是为了能让引脚可用
然后就是我们要用哪个引脚
幸狐给了个公式,可以为我们计算引脚号
GPIO 引脚编号计算公式:pin = bank * 32 + number GPIO 组内编号计算公式:number = group * 8 + X 综上:pin = bank * 32 + (group * 8 + X)
当然,你懒得计算,下面的图你直接用,浅蓝色的数字就是引脚号

既然有了图,我们直接说吧
这里的gpio分组,很像stm32的方式,虽然有所差别,但是不像stm32标准库配置那样的配置方法
写完了记得解除占用,以免后续报错
2. 设置GPIO方向为输出
// 构造方向文件路径
char direction_path[50];
snprintf(direction_path, sizeof(direction_path),
"/sys/class/gpio/gpio%d/direction", gpio_pin);
// 打开方向文件
FILE *direction_file = fopen(direction_path, "w");
if (direction_file == NULL) {
perror("Failed to open GPIO direction file");
return -1;
}
// 设置为输出模式
fprintf(direction_file, "out");
fclose(direction_file);这里的就是配置是输入还是输出,这里的点亮LED肯定是输出
写入输出输入很简单,写入的时候就写out/in
3. 控制GPIO引脚电平
// 构造值文件路径和cat命令
char value_path[50];
char cat_command[100];
snprintf(value_path, sizeof(value_path),
"/sys/class/gpio/gpio%d/value", gpio_pin);
snprintf(cat_command, sizeof(cat_command), "cat %s", value_path);
// 打开值文件
FILE *value_file = fopen(value_path, "w");
if (value_file == NULL) {
perror("Failed to open GPIO value file");
return -1;
}
// 循环3次,每次设置高电平1秒,低电平1秒
for (int i = 0; i < 3; i++) {
// 设置高电平
fprintf(value_file, "1");
fflush(value_file);
system(cat_command); // 显示当前值
sleep(1);
// 设置低电平
fprintf(value_file, "0");
fflush(value_file);
system(cat_command); // 显示当前值
sleep(1);
}
fclose(value_file);这里一看就是设置高低电平的
fprintf(value\_file, "1");就是设置高电平的,但要想让电平设置立刻有效,必须fflush(value\_file);
4. 取消导出GPIO引脚
// 打开取消导出文件
FILE *unexport_file = fopen("/sys/class/gpio/unexport", "w");
if (unexport_file == NULL) {
perror("Failed to open GPIO unexport file");
return -1;
}
// 写入要取消导出的GPIO引脚号
fprintf(unexport_file, "%d", gpio_pin);
fclose(unexport_file);
return 0;
}用完一定要取消导出哦
工作流程
- 获取用户输入的GPIO引脚号
- 导出该GPIO引脚(使其在用户空间可用)
- 设置GPIO方向为输出
循环3次:
- 设置GPIO为高电平(1)
- 显示当前值
- 等待1秒
- 设置GPIO为低电平(0)
- 显示当前值
- 等待1秒
- 取消导出GPIO引脚(释放资源)
你会看到灯会闪烁的
如果灯还没有闪烁,可能是接的位置不对,数接口要把usb接口朝上开始数的