本文最后修改時間: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。
因此實驗成功。