1.4 第一个程序:LED 闪烁
2026/7/19大约 2 分钟入门入门LED任务GPIO
1.4 第一个程序:LED 闪烁
📚 本节导读
学习时长:约 45 分钟
难度级别:⭐⭐☆☆☆
前置知识:第 1.3 节编译和下载程序
🎯 学习目标
- 创建第一个 OneOS 任务
- 掌握 GPIO 引脚的基本操作
- 理解任务调度和延时
- 成功运行 LED 闪烁程序
一、硬件准备
- STM32F103 开发板(或其他支持的开发板)
- 板载 LED(通常连接 PC0 或 PB5)
二、完整代码
#include <os_task.h>
#include <os_util.h>
#include <device.h>
#include <pin.h>
/* LED 引脚定义 */
#define LED_PIN GET_PIN(0, 0) /* PC0 */
/* LED 闪烁任务 */
void led_task(void *arg)
{
os_device_t *pin;
/* 打开 PIN 设备 */
pin = os_device_open("pin");
if (pin == NULL)
{
os_kprintf("PIN device open failed!\r\n");
return;
}
/* 设置 LED 引脚为推挽输出模式 */
os_pin_set_mode(pin, LED_PIN, OS_PIN_MODE_OUTPUT);
while (1)
{
/* 点亮 LED */
os_pin_write(pin, LED_PIN, OS_PIN_LOW);
os_task_msleep(500);
/* 熄灭 LED */
os_pin_write(pin, LED_PIN, OS_PIN_HIGH);
os_task_msleep(500);
}
}
/* 应用入口 */
int main(void)
{
os_task_t *task;
os_kprintf("OneOS LED Demo Start!\r\n");
/* 创建 LED 闪烁任务 */
os_task_create(&task, "led", led_task, NULL,
OS_TASK_PRIORITY_NORMAL, 1024);
/* 启动内核调度 */
os_kernel_start();
return 0;
}三、运行验证
- 编译并下载程序到开发板
- 观察 LED 以 500ms 间隔闪烁
- 通过串口查看输出:
OneOS LED Demo Start!
四、代码解析
| 步骤 | 代码 | 说明 |
|---|---|---|
| 打开设备 | os_device_open("pin") | 获取 PIN 设备句柄 |
| 配置引脚 | os_pin_set_mode() | 设置引脚为输出模式 |
| 控制电平 | os_pin_write() | 写入高低电平 |
| 任务延时 | os_task_msleep(500) | 延时 500ms,让出 CPU |
| 创建任务 | os_task_create() | 创建并启动任务 |
📝 小结
- 完成 OneOS 下第一个任务创建和运行
- 掌握 GPIO 引脚的基本操作
- 理解任务延时和调度原理