接下来我们将依据学习资料中的工程进行本次开发,本章节要实现的功能是编程实现LED灯的闪烁,作为单一功能,本次不实现呼吸灯,所以就相当于是点灯了。不要看不起点灯,实际上这个看似最简单的操作才是万事的开始,做容易验证你的基础程序行不行,所以对于一个不熟悉的单片机或者开发板,了解完开发环境后就是要实现点灯。
我们看一下板载LED的硬件原理部分:
可以看到,使用的是GPIO25引脚;
我们来到工程中看一下,老师对相关的引脚进行了初始化封装,不过我们还是要深入了解一下,
有关LED的操作如下:
#define PICO_LED_PIN 25 void LED_init(){ gpio_init(PICO_LED_PIN); gpio_set_dir(PICO_LED_PIN, GPIO_OUT); } void LED_ON(){ gpio_put(PICO_LED_PIN, 0); } void LED_OFF(){ gpio_put(PICO_LED_PIN, 1); }
进一步探索SDK中关于引脚配置的说明,类似:
static inline void gpio_set_dir(uint gpio, bool out) { uint32_t mask = 1ul << gpio; if (out) gpio_set_dir_out_masked(mask); else gpio_set_dir_in_masked(mask); }
发现该SDK中的配置相对常用的单片机的配置内容少了很多,也可以说是明确了很多,这方面是不是也是树莓派开发便捷的关键所在呢?
到这里我们就基本上了解了有关GPIO的相关操作,实际上模式都是超不多,先初始化,然后就可以操作了,接下来我们编写实现500ms间隔的LED闪烁:
while (true) { LED_ON(); MY_DEV_Delay_ms(500); LED_OFF(); MY_DEV_Delay_ms(500); }
编译下载注意一下,我们进入下载模式后,只要编译后就自动直接往模拟盘(PRI-RP2)中复制uf2文件,也就是说编译完直接就下载了,需要修改一下批文件(axf2uf2.bat),与模拟盘对应:
效果如下: