【RP2350】香瓜树莓派RP2350之LED

本文最后修改时间: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。

因此实验成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人运动控制原理浅析-UC Berkeley超视觉模态模型

加州伯克利发布的超视觉多感知模态融合(FuSe, Fuse Heterogeneous Sensory Data)模型,基于视觉、触觉、听觉、本体及语言等模态,利用自然语言跨模态对齐(Cross-Modal Grounding)优调视觉语言动作等通用模型,提高模型任务成功率。 总体框架 …

【Bootstrap V4系列】学习入门教程之 组件-媒体对象(Media object)

Bootstrap V4系列 学习入门教程之 组件-媒体对象(Media object) 媒体对象(Media object)一、Example二、Nesting 嵌套三、Alignment 对齐四、Order 顺序五、Media list 媒体列表 媒体对象(Media object) B…

解决VirtualBox中虚拟机(ubuntu)与主机(windows)之间互相复制粘贴(文本)

一.开始的设置 1.在VirtualBox中打开设置,常规中修改主机与虚拟机交互设置 2.虚拟机关闭状态下,存储中选中控制器SATA,勾选‘使用主机输入输出’ 3.选中操作系统对应的虚拟文件,.vdi文件,勾选右边的固态驱动器。 4.启…

java 多核,多线程,分布式 并发编程的现状 :从本身的jdk ,到 spring ,到其它第三方。

Java 在多核、多线程和高性能编程领域提供了丰富的现成框架和工具,既有标准库中的并发组件,也有第三方框架。以下是一些关键框架及其应用场景的总结:便于后面我们站在巨人的肩膀上,继续前行 一、Java 标准库中的多线程框架 Execut…

Nodejs核心机制

文章目录 前言 前言 结合 Node.js 的核心机制进行说明: 解释事件循环的各个阶段。 答案 Node.js 事件循环分为 6 个阶段,按顺序执行: Timers:执行 setTimeout 和 setInterval 的回调。 Pending I/O Callbacks:处理系…

C++笔记6:数字字面量后缀和前缀总结

在C中,可以在数字字面量后面添加字母后缀(或前缀)来表示特定的数据类型。这些后缀能够明确指定字面量的类型,避免类型转换带来的潜在问题。以下是常见的几种类型后缀及其含义: 1. 整数后缀 u 或 U:表示 u…

50.辐射抗扰RS和传导抗扰CS测试环境和干扰特征分析

辐射抗扰RS和传到抗扰CS测试环境和干扰特征分析 1. 辐射抗扰RS2. 传导抗扰CS 1. 辐射抗扰RS 辐射抗扰RS考察对外界电磁场干扰得抗扰能力,测试频段为80MHz~2000MHz,用1KHz得正弦波进行调幅,在电波暗室内进行。测试标准:IEC 61000-…

Java多态详解

Java多态详解 什么是多态? 比如我们说:“驾驶一辆车”,有人开的是自行车,有人开的是摩托车,有人开的是汽车。虽然我们都说“开车”,但“怎么开”是由具体的车类型决定的:“开”是统一的动作&a…

问题及解决01-面板无法随着窗口的放大而放大

在MATLAB的App Designer中,默认情况下,组件的位置是固定的,不会随着父容器的大小变化而改变。问题图如下图所示。 解决: 为了让Panel面板能够随着UIFigure父容器一起缩放,需要使用布局管理器,我利用 MATLA…

【GESP真题解析】第 20 集 GESP 二级 2025 年 3 月编程题 2:时间跨越

大家好,我是莫小特。 这篇文章给大家分享 GESP 二级 2025 年 3 月编程题第 2 题:时间跨越。 题目链接 洛谷链接:B4260 时间跨越 一、完成输入 根据题意,输入包含五行,每行一个正整数,分别代表 y,m,d,h,k。 注意到数据范围:对于全部数据,保证有 2000≤y≤3000,1≤m≤…

GTS-400 系列运动控制器板卡介绍(二十一)---电子齿轮跟随

运动控制器函数库的使用 运动控制器驱动程序、dll 文件、例程、Demo 等相关文件请通过固高科技官网下载,网 址为:www.googoltech.com.cn/pro_view-3.html 1 Windows 系统下动态链接库的使用 在 Windows 系统下使用运动控制器,首先要安装驱动程序。在安装前需要提前下载运动…

软件工程之需求分析涉及的图与工具

需求分析与规格说明书是一项十分艰巨复杂的工作。用户与分析员之间需要沟通的内容非常的多,在双方交流信息的过程中很容易出现误解或遗漏,也可能存在二义性。如何才能更加准确的表达双方的意思,且清楚明了,绘制各类图形就显得非常…

蓝桥杯14届 数三角

问题描述 小明在二维坐标系中放置了 n 个点,他想在其中选出一个包含三个点的子集,这三个点能组成三角形。然而这样的方案太多了,他决定只选择那些可以组成等腰三角形的方案。请帮他计算出一共有多少种选法可以组成等腰三角形? 输…

在Fiddler中添加自定义HTTP方法列并高亮显示

在Fiddler中添加自定义HTTP方法列并高亮显示 Fiddler 是一款强大的 Web 调试代理工具,允许开发者检查和操作 HTTP 流量。一个常见需求是自定义 Web Sessions 列表,添加显示 HTTP 方法(GET、POST 等)的列,并通过颜色区…

数据库分库分表实战指南:从原理到落地

1. 为什么要分库分表? 1.1 单库瓶颈表现 存储瓶颈:单表数据超过5000万行,查询性能急剧下降性能瓶颈:单库QPS超过5000后响应延迟显著增加可用性风险:单点故障导致全系统不可用 1.2 突破性优势 --------------------…

Selenium的driver.get_url 和 手动输入网址, 并点击的操作,有什么不同?

我在搞爬取的时候,发现有些网站直接用driver.get(url) 跳转到目标特定的网址的时候,会被强制跳转到其他的网址上,但是如果是自己手动,在网址栏那里输入网址,并点回车,却能完成跳转。 这是在使用 Selenium …

Java【06】数组查找(二分查找)、排序(冒泡排序、简单选择排序)

1. 数组的操作 1.1 数组的反转 int[] arrs{3,5,7,8,9}; 编写程序,让arrs中的数据进行反转{9,8,7,5,3} 1.2数组的查找 ① 顺序查找 从头到尾一个一个的找! ② 二分查找 对数组有一个要求:数组必须是有序(大小)的! int num3; int[]…

Redis 基础详解:从入门到精通

在当今互联网应用开发领域,数据存储与处理的性能和效率至关重要。Redis(Remote Dictionary Server)作为一款开源的、基于内存的键值存储系统,凭借其出色的性能和丰富的功能,被广泛应用于数据库、缓存、消息中间件等场景…

图片转ICO图标工具

图片转ICO图标 可批量操作 下载地址: 链接:https://pan.quark.cn/s/6312c565ec98 这个工具是一个批量图片转ICO图标的神器,有了它,以后再也不用为ICO格式的转换烦恼!而且这个软件特别小巧,完全不用安装。…

0基础 | L298N电机驱动模块 | 使用指南

引言 在嵌入式系统开发中,电机驱动是一个常见且重要的功能。L298N是一款高电压、大电流电机驱动芯片,广泛应用于各种电机控制场景,如直流电机的正反转、调速,以及步进电机的驱动等。本文将详细介绍如何使用51单片机来控制L298N电…