蓝桥杯嵌入式之 LED 闪烁

news2024/10/6 18:30:42

这篇文章将详细为大家介绍如何实现 LED 闪烁
我们使用的是 HAL 库

文章目录

  • 前言
  • 一、STM32CubeMX配置:
  • 二、LED 原理图:
  • 三、LED闪烁 讲解:
        • 1. HAL_GPIO_WritePin 函数:用于操作 *GPIO* 电平。
        • 2.HAL_Delay函数:作为毫秒级延迟的函数。
  • 四、例程代码:
  • 总结
        • LED 闪烁效果展示:


前言


一、STM32CubeMX配置:

  1. 使用的芯片是 STM32G431RBTx
    在这里插入图片描述

  1. 配置 RCC

在这里插入图片描述


  1. 我们使用的板子有 8 个LED灯,分别需要 PC8 ~ PC15 来控制。(这个在下面原理图处会讲)

在这里插入图片描述

STM32CubeMX 里配置 引脚, PD2 也需要配置。(这个在下面原理图处会讲)
在这里插入图片描述


二、LED 原理图:

在这里插入图片描述
从上图我们可以看到 8个 LED 是共阳(左边都接在 VDD 处),LED 左边是高电平,只要右边输出低电平就可以使 LED 亮

SN74HC573ADWR 锁存器:
在 LED 的最后面有 8 个PC接口, PC8 ~PC15 通过中间的锁存器控制 LED。

锁存器 Q 端 和 D 端的电压受 PD2 电平的影响:
(1)PD2 为高电平, D 和 Q电平一致。 (打开锁存器)
(2)PD2 为低电平, Q 的电平不被影响。(关闭锁存器)

当 PD2 = 1 时,D端的电平等于Q端电平,则可以通过 PC8 ~PC15 的电平控制 LED1 ~ LED8。

操作锁存器原则:
在打开锁存器前,需要保持 PC8 ~PC15 数据的稳定 。(这个在下面的程序中会很好的体现)
在关闭锁存器后,才可以操作 PC 端改变数据。


三、LED闪烁 讲解:

在编写程序时,我们采用 模块化编程 。所以对于 LED 程序,我们可以单独设置一个 led.c 和 led.h 文件,便于管理。 在 Inc 里添加.h 文件,在 Src 里添加 .c 文件。

在这里插入图片描述

1. HAL_GPIO_WritePin 函数:用于操作 GPIO 电平。

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

GPIOx :对应GPIO总线, 例如 GPIOC。
GPIO_Pin :对应引脚数,例如GPIO_PIN_8。
PinState :对应高低电平, GPIO_PIN_RESET 输出低电平; GPIO_PIN_SET 输出高电平。

由上面的 LED 原理图可知 当 PD2 为高电平, D 和 Q 电平一致。则可以通过 PC8 ~PC15 控制 LED1 ~ LED8

PC8 ~PC15 输出低电平就会使对应的 LED1 ~ LED8 点亮。输出低电平就会使对应的 LED1 ~ LED8 熄灭。

例如:PC8 端口控制 LED1。

 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET); //点亮 LED1 
 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET); //熄灭 LED1

2.HAL_Delay函数:作为毫秒级延迟的函数。

__weak void HAL_Delay(uint32_t Delay)

Delay :对应的延迟毫秒数。


四、例程代码:

  1. led.c 文件:

这里我们定义一个 u8 类型的变量 led_ctrl* 来代替需要设置的 GPIO 引脚。由于 HAL_GPIO_WritePin 函数的第二个参数的类型是 uint16_t , 所以需要左移 8 位。

0xff 就是选中 8 个LED 灯,设置电平为 GPIO_PIN_SET 高电平,就使其熄灭。

当然大家也可以使用上面的方法,直接写 GPIO 引脚 熄灭所有的LED。 HAL_GPIO_WritePin ( GPIOC , GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15 , GPIO_PIN_SET ) ;

PD2 端口在设置数据后先高电平打开,再低电平关闭。

void LED_Control(u8 led_ctrl)
{
	  /* 熄灭所有的LED */
	  HAL_GPIO_WritePin(GPIOC, 0xff<<8, GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); //高电平开锁存器
	  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); //低电平关闭锁存器
	  
	
	  HAL_GPIO_WritePin(GPIOC, led_ctrl<<8, GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); //高电平开锁存器
	  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); //低电平关闭锁存器
}

  1. main.c 文件:
    0x55 就是使 LED 灯,间隔一个选中一个。500 毫秒闪烁一次。
	LED_Control(0x55);
	  HAL_Delay(500);
	  
	LED_Control(0x00);
	  HAL_Delay(500);

总结

实现了 LED 闪烁 就是成功的第一步,大家跟着我的文章学习一定会收益颇大。

LED 闪烁效果展示:

下面是本实验的效果演示
【蓝桥杯嵌入式之Led闪烁】 https://www.bilibili.com/video/BV1W84y1a7pA/?share_source=copy_web&vd_source=62327db395640e4069ddf63611f28bd3

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

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

相关文章

【消息队列】Centos7 虚拟机安装 RocketMQ 及启动控制台

文章目录前言目的注意点官网虚拟机1. 环境变量2. 安装并启动rocketmq3. 安装docker4. docker拉取并运行rocketmq-dashboard5. 关闭防火墙6. 宿主机查看控制台7. 关闭虚拟机的进程后记前言 目的 模拟在服务器上运行RocketMQ&#xff0c;并且有控制台的能力。以后本地window可以…

【自学C++】C++变量作用域

C变量作用域 C变量作用域教程 C 中的一个 变量 或 常量 在程序中都有一定的作用范围&#xff0c;我们称之为作用域。C 变量作用域可分为局部作用域和全局作用域。 C局部变量 在 函数 内部声明/定义的变量叫局部变量&#xff0c;局部变量的作用域仅限于函数内部。同时&#…

Linux应用编程---8.共享内存

Linux应用编程—8.共享内存 ​ 共享内存是进程之间通讯的方式。大概原理是先申请一块共享内存&#xff0c;然后通过“映射”&#xff0c;映射到进程中。进程中读写这块被映射过来的内存&#xff0c;共享内存也会随之改变&#xff0c;同理其它进程也能做相同的操作。所以&#…

dubbo源码实践-protocol层例子

1 概述本文提供了基于protocol层的一个客户端、服务端代码例子。从dubbo 2.7的架构图上可以看到protocol层上在Remoting层之上的&#xff0c;个人理解Protocol层不在讨论客户端和服务端的概念了&#xff0c;开始讨论服务提供者和服务消费者的概念了。参考上一篇dubbo源码实践-p…

基于ngxin一个http模板

1.初始化 static char * ngx_http_mytest(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);static ngx_int_t ngx_http_mytest_handler(ngx_http_request_t *r);static ngx_command_t ngx_http_mytest_commands[] {{ngx_string("mytest"),NGX_HTTP_MAIN_CONF | N…

分布式基础篇2——分布式组件(谷粒商城)

一、SpringCloud Alibaba1、简介2、为什么使用3、版本选择4、依赖选择二、SpringCloud Alibaba 组件1、Nacos作为注册中心2、OpenFeign3、Nacos作为配置中心namespaceData IDGroup同时加载多个配置文件三、Spring Cloud1、GateWay简介三大核心部分网关的使用视频来源: 【Java项…

爬虫学习+实战

爬虫 概念&#xff1a; 网络爬虫&#xff1a;就是模拟客户端发送请求&#xff0c;获取响应数据&#xff0c;一种按照一定的规则&#xff0c;自动地抓取万维网上的信息的程序或者脚本 爬虫分类: 通用爬虫&#xff1a;抓取系统中重要的组成部分。抓取的是一整张页面数据聚焦爬…

I2C总线驱动

一. I2C背景知识 SOC芯片平台的外设分为&#xff1a; 一级外设&#xff1a;外设控制器集成在SOC芯片内部二级外设&#xff1a;外设控制器由另一块芯片负责&#xff0c;通过一些通讯总线与SOC芯片相连 Inter-Integrated Circuit&#xff1a; 字面意思是用于“集成电路之间”的…

SELECT COUNT(*) 会造成全表扫描?回去等通知吧

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/T…

CPU_并行(多线程)不同高性能旋转图片

并行(多线程)不同高性能旋转图片 代码 ImageStuff.h struct ImgProp {int Hpixels;int Vpixels;unsigned char HeaderInfo[54];unsigned long int Hbytes; };struct Pixel {unsigned char R;unsigned char G;unsigned char B; };unsigned char** CreateBlankBMP(); unsigned…

Java中>>,>>=,<<,<<=运算符

今天在刷LeetCode的时候遇到了一个运算符<<&#xff0c;对这个运算符的意思有点模糊&#xff0c;然后便开始面向百度学习&#xff0c;但是发现&#xff0c;很多篇帖子表达的意思太文章化&#xff0c;不够通俗易懂&#xff0c;于是打算写下这篇帖子&#xff0c;让大家能够…

工作笔记——微信支付开发相关知识整理

在最近的工作中&#xff0c;引入了微信小程序支付&#xff0c;在开发过程中积累和整理了一些技术知识&#xff0c;现将其整理如下 目录 一、概念认识 &#xff08;一&#xff09;术语介绍 &#xff08;二&#xff09;名词解释 &#xff08;四&#xff09;对接微信支付接口规…

Win10安卓子系统安装教程

Win10安卓子系统安装教程必要安装文件下载和安装子系统安装方法方法一&#xff1a;安装 WSA PacMan方法二&#xff1a;安装 APK安装程序必要安装文件下载和安装 win10安卓子系统和win11子系统的安装一样&#xff0c;都必须要安装适用于 Android ™的 Windows 子系统设置的软件…

Java设计模式中行为型模式是什么/模板方式又是什么,编程怎么运用

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 6.行为型模式 6.1 概述 6.1.1 特点 用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎么相互协作共同完成单个对象都无法单独完成任务涉…

分布式基础篇3——前端开发基础知识(谷粒商城)

前端技术对比一、ES61、简介2、什么是 JavaScript3、ES6新特性3.1 let3.2 const3.3 解构表达式3.4 字符串扩展3.5 函数优化3.6 对象优化3.7 map 和 reduce3.8 Promise3.9 模块化二、Vue1、MVVM 思想2、Vue 简介3、Vue 入门案例4、Vue 指令插值表达式v-text、v-htmlv-bindv-mode…

【CANN训练营第三季】基于昇腾PyTorch框架的模型训练调优

文章目录性能分析工具PyTorch Profiling性能分析工具CANN Profiling结业考核1、使用Pytorch实现LeNet网络的minist手写数字识别。2、采用课程中学习到的手工或者自动迁移方式&#xff0c;将上述脚本迁移到昇腾npu上&#xff0c;单机单卡&#xff0c;提供迁移脚本&#xff0c;突…

YOLOv5视觉AI库安装

打开YOLOv5开源仓库: https://github.com/ultralytics/yolov5/blob/master/README.zh-CN.md下载源码:安装 : pip install -r requirements.txt完成安装目标检测推理可通过PyTorch Hub加载YOLOv5检测模型检测图像并返回数据帧使用YOLOv5要先安装opencv-python和pandas库安装open…

C#,图像二值化(18)——全局阈值的模糊集理论算法(Huang Thresholding)与源程序

1 模糊集理论模糊集理论,也称为模糊集合论,或简单地称为模糊集,1965年美国学者扎德在数学上创立了一种描述模糊现象的方法—模糊集合论。这种方法把待考察的对象及反映它的模糊概念作为一定的模糊集合&#xff0c;建立适当的隶属函数&#xff0c;通过模糊集合的有关运算和变换&…

arduino - pinMode参数1的确定 - 以arduino nano every核心板为例

文章目录arduino - pinMode参数1的确定 - 以arduino nano every核心板为例概述笔记pins_arduino.hABX00028-datasheet.pdf简单的辨认管脚号就照ABX00028-datasheet.pdf来ENDarduino - pinMode参数1的确定 - 以arduino nano every核心板为例 概述 arduino nano every的核心板使…

我的交易抽象思路分享

这几天我老是抛出一些问题给老师们&#xff0c;都是故意而为之&#xff0c;因为我靠这种方式自己引导自己很多年&#xff1b; 比如&#xff1a;龙头真的存在么&#xff1f;为何前几天它还不是龙头&#xff0c;怎么今天就是了&#xff1f; 再如&#xff1a;交易模式和交易系统…