验证平台 | 硬件连接 | 环境搭建 |
---|---|---|
野火 M3 M4 M7 开发板 | 硬件连接 | |
正点原子 M3 M4 M7 开发板 | 硬件连接 | |
QEMU 模拟器 | 环境搭建 | |
Keil MDK 模拟器 | 环境搭建 |
要求硬件上:
- 至少有一路 GPIO, 能够用来接 LED 灯
- 有一路串口用来做 msh shell 终端
BSP 中已经实现如下驱动:
- 串口驱动
- PIN 驱动
根据硬件连接情况配置与 LED 灯连接的 PIN 号,有两种配置方式:
- 手动方式
直接在新创建的例程文件中加入以下宏定义进行配置:
#define LED_PIN xxx
- menuconfig 配置方式
通过使用 env 工具的 menuconfig 配置方式,会自动在 rtconfig.h 配置文件中生成如下的宏定义:
#define LED_PIN xxx
创建 led_blink.c 文件,并在文件中加入引用头文件
#include <rtthread.h>
#include <rtdevice.h>
编写 led_blink()函数,首先设置 PIN 脚模式
rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
PIN 脚模式设置好以后,就可以使用 rt_pin_write() 接口来拉高或者拉低 PIN 脚电平,控制对应灯的亮和灭,通过调整延时的长度来控制闪烁的频率,同时将灯的状态信息从串口打印出来。
while (1)
{
/* led1 on */
rt_kprintf("led on, count : %d\r\n", count);
count++;
rt_pin_write(LED_PIN, 0);
rt_thread_delay(RT_TICK_PER_SECOND / 2); /* 延时 500 毫秒 */
/* led1 off */
rt_kprintf("led off\r\n");
rt_pin_write(LED_PIN, 1);
rt_thread_delay(RT_TICK_PER_SECOND / 2);
}
这里的 rt_thread_delay(RT_TICK_PER_SECOND/2)
函数的作用是延迟一段时间, 即让 led 线程休眠 50 个 OS Tick (按照 rtconfig.h 中的配置,1 秒 = RT_TICK_PER_SECOND 个 tick = 100 tick,即在这份代码中延迟时间等于 500ms)。
通过如下的方式可以将示例函数 led_blink 导出到 msh 命令列表中:
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(led_blink, led blink sample);
一种方式是在 main 程序中调用 led_blink() 函数
int main(int argc, char **argv)
{
led_blink();
}
另一种方式是通过 msh shell 运行,在步骤一中已经将 led_blink 命令导出到了 msh 命令列表中,因此系统运行起来后,在 msh 命令行下输入 led_blink 命令即可让例程运行。
msh> led_blink
LED 灯能够进行亮灭交替,同时串口打印出 LED 灯的状态信息。
led on, count : 0
led off
led on, count : 1
led off
led on, count : 2
led off
led on, count : 3
led off
led on, count : 4
led off
led on, count : 5
led off
- PIN 号和 GPIO 号是不相同的,需要注意区分。
- QEMU 和 Keil MDK 模拟器平台因为没有实际的 LED 灯硬件,因此只能通过串口日志信息来判断例程的运行情况。