本文最后修改时间:2025年05月10日 01:57
一、本节简介
本节以树莓派pico2开发板为例,举例如何写一个LED驱动加进工程里。
二、实验平台
1、硬件平台
1)树莓派pico2开发板
①树莓派pico2开发板(作为仿真器)
②micro usb数据线
2)电脑
3)香瓜RP2350目标板
2、软件平台
1)VS CODE
三、版权声明
1)作者:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:897503845@qq.com
4)香瓜嵌入式之树莓派群:512598061
5)本文出处:原创连载资料《简单粗暴学树莓派》
6)完整开源资料下载地址(电脑端打开):
opengua.taobao.com
四、实验前提
1、在进行本文步骤前,请先阅读以下章节:
1)《简单粗暴学树莓派》的“第一章至第二章”章节。
2、在进行本文步骤前,请先实现以下章节:
1)《简单粗暴学树莓派》的《香瓜树莓派RP2350之搭建开发环境(windows)》
2)《简单粗暴学树莓派》的《香瓜树莓派RP2350之新建工程》
五、硬件原理
1、硬件连接
实际只接了4根线,3.3V、GND、CLK、DIO
注意: 给pico2供电时接VSYS,是因为pico2会再经过稳压到3.3v供电给pico2目标板的rp2350。而香瓜使用的板子仿真接口是直接供电给rp2350的,所以需要直连3.3v。
2、原理图
4个led拉高为亮、拉低为灭
六、实验步骤
1、在VS CODE工程文件夹下,添加驱动GUA_Led.c(VS CODE会自动加载)
//********************************************************************** //name: GUA_Led.c //introduce: led驱动 //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.02.18 //********************************************************************** #include "pico/stdlib.h" #include "GUA_Led.h" //********************************************************************** //name: GUA_Led_Init //introduce: led初始化 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.02.18 //********************************************************************** void GUA_Led_Init(void) { //先拉低,避免灯闪烁一下 LED1_BAT0_OUT_L; LED2_BAT25_OUT_L; LED3_BAT75_OUT_L; LED4_BAT100_OUT_L; //GPIO22 0~25% 输出 gpio_set_dir(LED1_BAT0_PIN, GPIO_OUT); gpio_set_function(LED1_BAT0_PIN, GPIO_FUNC_SIO);
//GPIO23 25%~50% 输出 gpio_set_dir(LED2_BAT25_PIN, GPIO_OUT); gpio_set_function(LED2_BAT25_PIN, GPIO_FUNC_SIO); //GPIO24 50~75% 输出 gpio_set_dir(LED3_BAT75_PIN, GPIO_OUT); gpio_set_function(LED3_BAT75_PIN, GPIO_FUNC_SIO); //GPIO25 75~100% 输出 gpio_set_dir(LED4_BAT100_PIN, GPIO_OUT); gpio_set_function(LED4_BAT100_PIN, GPIO_FUNC_SIO); } |
2、在VS CODE工程文件夹下,添加驱动GUA_Led.h(VS CODE会自动加载)
//********************************************************************** //name: GUA_Led.h //introduce: led驱动的头文件 //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.02.18 //********************************************************************** #ifndef _GUA_LED_H_ #define _GUA_LED_H_ /*********************宏定义************************/ //LED宏 #define LED1_BAT0_PIN 22 #define LED1_BAT0_OUT_H gpio_put(LED1_BAT0_PIN, true); #define LED1_BAT0_OUT_L gpio_put(LED1_BAT0_PIN, false); #define LED2_BAT25_PIN 23 #define LED2_BAT25_OUT_H gpio_put(LED2_BAT25_PIN, true); #define LED2_BAT25_OUT_L gpio_put(LED2_BAT25_PIN, false); #define LED3_BAT75_PIN 24 #define LED3_BAT75_OUT_H gpio_put(LED3_BAT75_PIN, true); #define LED3_BAT75_OUT_L gpio_put(LED3_BAT75_PIN, false); #define LED4_BAT100_PIN 25 #define LED4_BAT100_OUT_H gpio_put(LED4_BAT100_PIN, true); #define LED4_BAT100_OUT_L gpio_put(LED4_BAT100_PIN, false); /*********************外部函数声明************************/ extern void GUA_Led_Init(void); #endif |
3、添加对应驱动文件名称
4、在应用层中调用
1)添加驱动头文件(main.c中)
#include "GUA_Led.h" |
2)添加驱动初始化代码(main.c的main函数中)
//初始化LED GUA_Led_Init(); |
3)添加测试代码(main.c的main函数中)
//拉高 LED1_BAT0_OUT_H; sleep_ms(1000); LED2_BAT25_OUT_H; sleep_ms(1000); LED3_BAT75_OUT_H; sleep_ms(1000); LED4_BAT100_OUT_H; sleep_ms(1000); //拉低 LED1_BAT0_OUT_L; sleep_ms(1000); LED2_BAT25_OUT_L; sleep_ms(1000); LED3_BAT75_OUT_L; sleep_ms(1000); LED4_BAT100_OUT_L; sleep_ms(1000); |
七、实验结果
编译并仿真,全速运行下可看到每隔1秒从LED1亮到LED4,再从LED1灭到LED4。
因此实验成功。