野火STM32F103VET6指南者开发板入门笔记:【1】点亮RGB(基于结构体)

文章目录

  • 硬件介绍
  • 软件介绍:结构体方式
  • 软件介绍:宏定义方式


硬件介绍

提示:本文是基于野火STM32F103指南者开发板所写例程,其他开发板请自行移植到自己的工程项目当中即可。

RGB-LEDPin引脚:低电平-点亮,高电平-熄灭
REDPB5
GREENPB0
BLUEPB1

硬件原理图


软件介绍:结构体方式

在这里插入图片描述

bsp_rgb.h 文件下的代码如下(示例):

#ifndef __BSP_RGB_H
#define __BSP_RGB_H#include "stm32f10x.h"
#include "stdint.h" //定义一个RGB_GPIO_TypeDef类型的结构体,为了方便移植修改,将需要经常修改的参数放到结构体当中
typedef struct 
{uint32_t 		RCC_APB2Periph;	//APB2总线时钟GPIO_TypeDef* 	GPIOx;			//GPIO_PORTuint16_t 		GPIO_Pin;		//GPIO_PIN
}RGB_GPIO_TypeDef;					//定义一个结构体数组并对其进行初始化
static RGB_GPIO_TypeDef RGB_GPIO_List[]=
{{RCC_APB2Periph_GPIOB, GPIOB, GPIO_Pin_5},{RCC_APB2Periph_GPIOB, GPIOB, GPIO_Pin_0},{RCC_APB2Periph_GPIOB, GPIOB, GPIO_Pin_1},
};//计算结构体数组中结构体的个数
#define RGB_NUM_MAX (sizeof(RGB_GPIO_List)/sizeof(RGB_GPIO_List[0])) typedef enum
{ GPIO_RGB_RED = 0,GPIO_RGB_GREEN, GPIO_RGB_BLUE
}RGB;void RGB_Init(void);
void TurnOnLed(uint8_t LedNum);
void TurnOffLed(uint8_t LedNum);
void ToggleLed(uint8_t LedNum);#endif /* __BSP_RGB_H */

bsp_rgb.c 文件下的代码如下(示例):

#include "bsp_rgb.h"void RGB_Init(void)
{uint8_t i = 0;GPIO_InitTypeDef GPIO_InitStructure;for(i = 0;i < RGB_NUM_MAX;i++){RCC_APB2PeriphClockCmd(RGB_GPIO_List[i].RCC_APB2Periph,ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = RGB_GPIO_List[i].GPIO_Pin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(RGB_GPIO_List[i].GPIOx, &GPIO_InitStructure);//初始化RGB上电状态,熄灭GPIO_SetBits(RGB_GPIO_List[i].GPIOx,RGB_GPIO_List[i].GPIO_Pin);}	
}void TurnOnLed(uint8_t LedNum)
{if(LedNum >= RGB_NUM_MAX)return;elseGPIO_ResetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);
}void TurnOffLed(uint8_t LedNum)
{if(LedNum >= RGB_NUM_MAX)return;elseGPIO_SetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);
}void ToggleLed(uint8_t LedNum)
{if(LedNum >= RGB_NUM_MAX)return;else{if(GPIO_ReadOutputDataBit(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin) == 1)GPIO_ResetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);elseGPIO_SetBits(RGB_GPIO_List[LedNum].GPIOx,RGB_GPIO_List[LedNum].GPIO_Pin);}	
}

软件介绍:宏定义方式

bsp_rgb.c 文件下的代码如下(示例):


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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

表达式求值(可以计算两位数以上)

此程序可计算两位数以上的表达式 import java.util.Stack;public class ExpressionEvaluator {public int evaluate(String s) {Stack<Integer> numbers new Stack<>();Stack<Character> operators new Stack<>();int i 0;char c s.charAt(i);whil…

灵足时代:具身智能核心部件的新秀崛起——解析数千万元天使轮融资

在智能科技日新月异的今天,具身智能作为连接物理世界与数字世界的重要桥梁,正逐步成为科技创新的前沿阵地。近日,具身智能核心部件领域的新锐公司——“灵足时代”宣布完成数千万元天使轮融资,这一消息无疑为行业内外带来了强烈的震撼与期待。本轮融资由雅瑞智友科学家基金…

在 MySQL 中处理和优化大型报告查询经验分享

在 MySQL 数据库的使用过程中&#xff0c;我们经常会遇到需要生成大型报告的情况&#xff0c;这些查询可能涉及大量的数据和复杂的计算&#xff0c;对数据库的性能提出了很高的要求。 一、问题背景 大型报告查询通常具有以下特点&#xff1a; 数据量大&#xff1a;涉及大量的…

【2024年最新】基于Spring Boot+vue的旅游管理系统lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

用js和css实现一行一行文字交替显示

用js和css实现&#xff0c;效果是&#xff1a;有多行文字&#xff0c;一行一行的交替显示&#xff0c;每隔几秒显示一行&#xff0c;循环显示。 代码如下&#xff0c;保存为html即可看到效果&#xff1a; <!DOCTYPE html> <html lang"en"> <hea…

数据库软题6.1-关系模式-关系模式的各种键

关系模式的各种键 题1-由关系模式求候选键 1. 候选键唯一不冗余 对选项进行闭包运算&#xff0c;如果得到全部属性U&#xff0c;则为候选码 A:AC-ABC-ABCD B:AB-ABC-ABCD C:AE-ABE-ABCE -ABCDE-ABCDEH D:DE2. R的候选码可以从A1,A2,A3,A1A2,A1A3,A2A3,A1A2A3中选择&#xff…

JC2804快速入门

目录 一、硬件接线二、软件操作2.1、CAN分析仪2.2、默认参数2.3、读取校准参数2.4、闭环控制2.5、调整PI参数2.6、切换控制模式 三、其它CAN模块操作3.1、使用CANable3.2、发送指令3.3、其它 一、硬件接线 红色接电源正极&#xff0c;黑色接电源负极&#xff0c;电源电压7—12V…

每日一道算法题——二分查找

文章目录 开口闭口区分:1、问题2、示例3、解决方法&#xff08;1&#xff09;注意点&#xff08;2&#xff09;代码 开口闭口区分: 开口闭口区分: [1,2,3] 左闭右闭[1,2,3) 左闭右开(1,2,3] 左开右闭 开口如数组(1,2,3)不包含当前数据&#xff0c;也就是指只有2&#xff0c;闭口…

分布式锁--redission 最佳实践!

我们知道如果我们的项目服务不只是一个实例的时候&#xff0c;单体锁就不再适用&#xff0c;而我们自己去用redis实现分布式锁的话&#xff0c;会有比如锁误删、超时释放、锁的重入、失败重试、Redis主从一致性等等一系列的问题需要自己解决。 当然&#xff0c;上述问题并非无…

【Java】—— 泛型:泛型的理解及其在集合(List,Set)、比较器(Comparator)中的使用

目录 1. 泛型概述 1.1 生活中的例子 1.2 泛型的引入 2. 使用泛型举例 2.1 集合中使用泛型 2.1.1 举例 2.1.2 练习 2.2 比较器中使用泛型 2.2.1 举例 2.2.2 练习 1. 泛型概述 1.1 生活中的例子 举例1&#xff1a;中药店&#xff0c;每个抽屉外面贴着标签 举例2&…

【JavaEE】——文件IO

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;认识文件 1&#xff1a;文件的概念 2&#xff1a;文件的结构 3&#xff1a;文件路径…

【操作系统】体系结构

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 操作系统的内核 操作系统结构——分层结构 操作系统结构——模块化 操作系统结构——宏内核、微内核…

修改Anaconda虚拟环境默认安装路径(Linux系统)

文章目录 修改Anaconda虚拟环境默认安装路径(Linux系统)1.方法一&#xff1a;使用--prefix参数2.方法二&#xff1a;配置conda环境的默认安装位置 修改Anaconda虚拟环境默认安装路径(Linux系统) 1.方法一&#xff1a;使用--prefix参数 在创建虚拟环境时&#xff0c;使用--pre…

BUSHOUND的抓包使用详解

BUSHOUND是个过滤软件&#xff0c;确切来说是在windows操作系统它的驱动层USB传输的数据。所以这个数据上可能是与USB的总线上的数据是有一点差异的。 先要选择设备的抓包。所以就是在device这个界面底下&#xff0c;我们首先要选择我们要抓的设备。 尝试下键盘设备 电脑键盘…

【可视化大屏】将柱状图引入到html页面中

到这里还是用的死数据&#xff0c;先将柱状图引入html页面测试一下 根据上一步echarts的使用步骤&#xff0c;引入echarts.js后需要初始化一个实例对象&#xff0c;所以新建一个index.js文件来进行创建实例化对象和配置数据信息等。 //在index.html引入<script src"j…

Python爬虫使用实例-mdrama

一个Python爬虫使用实例&#xff1a;主要用于下载指定的剧集音频。分别从网页和json文件中获取剧集的title和剧集中所存在音频的id&#xff0c;调用you-get&#xff0c;最后自动重命名下载文件夹为剧集名title。 目标网址&#xff1a; https://www.missevan.com/mdrama/其中为…

开源AI智能名片小程序源码:私域电商构建独特竞争力的新机遇

摘要&#xff1a;本文旨在探讨私域电商如何利用开源AI智能名片小程序源码构建独特竞争力。在强调独特性是通向成功的必要条件的基础上&#xff0c;分析开源AI智能名片小程序源码在私域电商发展独特性方面的作用及相关策略。 一、引言 在竞争激烈的商业环境中&#xff0c;让自己…

RTX4060安装nvidia显卡驱动

文章目录 nvidia drivers下载删除原有nvidia驱动安装nvidia驱动如果报错Unable to find the kernel source tree for the currently runningbuilding kernel modules解决方法 报错成功安装!!! nvidia drivers下载 https://www.nvidia.cn/geforce/drivers/#:~:textNVIDIA%20GeF…

Python从入门到高手5.1节-Python简单数据类型

目录 5.1.1 理解数据类型 5.1.2 Python中的数据类型 5.1.3 Python简单数据类型 5.1.4 特殊的空类型 5.1.5 Python变量的类型 5.1.6 广州又开始变热 5.1.1 理解数据类型 数据类型是根据数据本身的性质和特征来对数据进行分类&#xff0c;例如奇数与偶数就是一种数据类型。…

去噪扩散模型

Denoising Diffusion Probabilistic Models 图像扩散模型是一种生成模型&#xff0c;它基于概率扩散过程来生成新的图像。 核心步骤包括&#xff1a;&#xff08;1&#xff09;前向扩散过程&#xff1b;&#xff08;2&#xff09;逆向扩散过程 前向扩散过程&#xff08;正向过…