一、环境搭建
上篇分享了开箱贴,接着开发入门篇,此次墨水屏DIY开发采用的IDE是Keil,其实Pico开发采用Python语言(Thonny)比较常见,随着树莓派的影响力不断壮大,树莓派也可以使用Keil,Visual Studio Code等工具开发。既然使用Keil开发Pico,因此需要下载基于Keil的pack支持包,开发者可通过链接:https://www.keil.arm.com/packs/rp2xxx_dfp-raspberrypi/boards/,“RaspberryPi.RP2xxx_DFP.0.9.5.pack”直接安装即可。笔者采用MDK5.38.0.0,Arm Compiler6编译器。
二、电路原理图


三、代码实现
根据以上电路图LED的管脚分布,我们可知通过控制GPIO25管脚的高低电平输出即可控制LED灯的点亮与熄灭。这里引入PWM,实现呼吸灯效果。
#include "pico/stdlib.h"
#include "my_led.h"
#define MANUAL
#define PICO_LED_PIN 25
void pwm_test(void);
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);
}
void my_SET_PWM(uint16_t Value);
static void system_init(void)
{
extern void SystemCoreClockUpdate();
SystemCoreClockUpdate();
}
int main(void)
{
system_init();
LED_init();
pwm_test();
return 0;
}
void my_RUN_Breathe(void)
{
static uint8_t pwm_Value=0;
static uint8_t pwm_Direc=0;
#ifdef MANUAL
my_SET_PWM(1);
MY_DEV_Delay_ms(100);
my_SET_PWM(5);
MY_DEV_Delay_ms(100);
my_SET_PWM(10);
MY_DEV_Delay_ms(100);
my_SET_PWM(30);
MY_DEV_Delay_ms(100);
my_SET_PWM(50);
MY_DEV_Delay_ms(100);
my_SET_PWM(70);
MY_DEV_Delay_ms(100);
my_SET_PWM(90);
MY_DEV_Delay_ms(100);
my_SET_PWM(110);
MY_DEV_Delay_ms(100);
my_SET_PWM(130);
MY_DEV_Delay_ms(100);
my_SET_PWM(110);
MY_DEV_Delay_ms(100);
my_SET_PWM(90);
MY_DEV_Delay_ms(100);
my_SET_PWM(70);
MY_DEV_Delay_ms(100);
my_SET_PWM(50);
MY_DEV_Delay_ms(100);
my_SET_PWM(30);
MY_DEV_Delay_ms(100);
my_SET_PWM(10);
MY_DEV_Delay_ms(100);
my_SET_PWM(5);
MY_DEV_Delay_ms(100);
#else
MY_DEV_Delay_ms(10);
if(pwm_Value == 0){
pwm_Direc = 0;
}
if(pwm_Value >= 100){
pwm_Direc = 1;
}
if(pwm_Direc == 0){
pwm_Value++;
}
else{
pwm_Value--;
}
my_SET_PWM(pwm_Value);
#endif
}
uint my_slice_num;
void my_pwm_init(){
gpio_set_function(PICO_LED_PIN, GPIO_FUNC_PWM);
my_slice_num = pwm_gpio_to_slice_num(PICO_LED_PIN);
pwm_set_wrap(my_slice_num, 1000);
pwm_set_chan_level(my_slice_num, PWM_CHAN_B, 1);
pwm_set_clkdiv(my_slice_num,50);
pwm_set_enabled(my_slice_num, true);
}
void my_SET_PWM(uint16_t Value)
{
if(Value<0 || Value >1000){
}else {
pwm_set_chan_level(my_slice_num, PWM_CHAN_B, Value);
}
}
void pwm_test(){
my_pwm_init();
while(1){
my_RUN_Breathe();
}
}根据以上代码可知,实现PWM呼吸灯效果可通过手动调节亮灭频率与算法自动调节两种方式实现,效果都是一样的,人的肉眼几乎是很难区分的。
四、脚本修改
先按下Pico板上的BOOTSEL按钮,然后给Pico上电,此时电脑右下角会自动弹出盘符,笔者显示的是H盘符,因此需要将工程目录中的“axf2uf2.bat”文件修改成如下:
"..\..\tool\elf2uf2.exe" .\Objects\template.axf .\template.uf2 copy/B .\template.uf2 H:\

注意:修改完bat脚本文件中的指定路径,只需要将Pico板进入盘符烧录模式,再全编译工程即可将生成的uf2文件拷贝到Pico中,但这里需要注意的是需要将电脑中的杀毒软件卸载或退出,否则tool文件夹下的“elf2uf2.exe”会被清除掉,则导致不能将axf转化成uf2文件。
五、呼吸灯效果

我要赚赏金
