当前位置: 首页 > news >正文

Day01 嵌入式 -----流水灯

一、简单介绍

      嵌入式系统中的流水灯是一种常见的示例项目,通常用于演示嵌入式系统的基本功能和控制能力。流水灯由多个发光二极管(LED)组成,这些LED按照一定的顺序依次点亮和熄灭,形成一种像水流一样的流动效果。

二、查看功能手册

这里我们使用STM32F40xxx这个板子来实现流水灯这个小项目

2.1 查看硬件引脚号码

 由上图可知,LED0这个灯所在引脚 PF9,LED1这个灯所在引脚 PF10

可知 PF9:"PF"表示端口F,"9"表示该端口上的第9号引脚

        PF10:"PF"表示端口F,"10"表示该端口上的第10号引脚

2.2查看硬件引脚号码对应的时钟型号

 

根据硬件引脚号码,LED0和LED1都是PF,那么控制他俩的时钟型号都是GPIOF,而根据上图可知,GPIOF在AHB1总线上,根据这个逻辑就能找到GPIOF时钟型号,并打开时钟信号。

AHB1ENR 寄存器用于配置 AHB1 总线上各个模块的时钟使能位。通过将 0x00000020 写入 AHB1ENR 寄存器的相应位置,启用了 GPIOF 的时钟

所以打开控制LED0,LED1的时钟信号就是使用一下

RCC->AHB1ENR=0x00000020;//时钟使能

2.3、确定输出模式

GPIOF->MODER=0x00040000;//配置引脚为输出模式

2.4、确定输出类型

GPIOF->OTYPER=0x00000000;//设置输出模式为推挽输出

2.5、确定输出速度

GPIOF->OSPEEDR=0x000C0000;//

2.6、确定端口输出数据

2.6.1 开灯

原理:开灯需要一个低电平,注意不是高电平

//GPIOF->ODR=0x00000000;

2.6.2 关灯

原理:关灯需要一个高电平,注意不是低电平

 

找到引脚9 然后将值改成1,后续通过非门输出就为0,即关灯

//GPIOF->ODR=0x0200;

三、使用现成函数来实现

注意这里我们的逻辑还是和二一样,首先重重之重的就是时钟信号,必须先打开时钟信号,然后创建一个结构体,这个结构体当中有输入输出模型,速度,引脚等,用于初始化灯。

 3.1 Pin引脚

3.2 输入/输出模式

3.3输出类型

3.4 速度

3.5 设置引脚的上下拉电阻

3.6 开关灯

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//关灯
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//开灯

注意:开灯是低电平有效,关灯是高电平有效。

GPIO_SetBits函数用于将某位引脚置1,使其输出高电平。

GPIO_ResetBits函数用于将某位引脚置0,使其输出低电平。

四、代码实现

#ifndef _LED_H_
#define _LED_H_
void LED_Init(void);void LED1_ON(void);
void LED1_OFF(void);void LED2_ON(void);
void LED2_OFF(void);#endif // GPIO_CONFIG_H
#include "LED.h"
#include "stm32f4xx.h"  
void LED1_ON(void)//开灯
{GPIO_ResetBits(GPIOF,GPIO_Pin_9);
}
void LED1_OFF(void)//关灯
{GPIO_SetBits(GPIOF,GPIO_Pin_9);
}void LED2_ON(void)
{GPIO_ResetBits(GPIOF,GPIO_Pin_10);
}
void LED2_OFF(void)
{GPIO_SetBits(GPIOF,GPIO_Pin_10);
}
void LED_Init(void)
{RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIO_InitTypeDef GPIO_InitTypeDefStruct1;GPIO_InitTypeDefStruct1.GPIO_Mode=GPIO_Mode_OUT;//输出GPIO_InitTypeDefStruct1.GPIO_OType=GPIO_OType_PP;//推挽输出GPIO_InitTypeDefStruct1.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;//引脚GPIO_InitTypeDefStruct1.GPIO_Speed= GPIO_High_Speed ;//速度GPIO_Init(GPIOF,&GPIO_InitTypeDefStruct1);
}int main()
{LED_Init();LED1_OFF();LED2_OFF();/*int n=500000;while(1){while(n--){};n=5000000;//延时LED1_ON();while(n--){};n=5000000;LED1_OFF();while(n--){};n=5000000;LED2_ON();while(n--){};n=5000000;LED2_OFF();}*/
}

相关文章:

Day01 嵌入式 -----流水灯

一、简单介绍 嵌入式系统中的流水灯是一种常见的示例项目,通常用于演示嵌入式系统的基本功能和控制能力。流水灯由多个发光二极管(LED)组成,这些LED按照一定的顺序依次点亮和熄灭,形成一种像水流一样的流动效果。 二、…...

Redis集群详解

1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式:主从复制…...

【随笔】个人面试纪录

面试被问了几个问题。 1.mount怎么用 没答上来&#xff0c;说的 --help 可以看 mount --help | less mount [ --source ] <source> | [ --target ] <target> 2.ansible怎么用&#xff0c;有哪些常用的模块 ansible <hosts|all> -m <module> 常用的模块…...

Vue3的reactive、ref、toRef、toRefs用法以及区别

在 Vue3 中&#xff0c;reactive, ref, toRef, toRefs 都是用于创建响应式数据的方法。它们之间的主要区别在于它们的使用方式和返回值类型。 reactive&#xff1a;用于将一个普通对象转换为响应式对象。当对象的属性发生变化时&#xff0c;视图会自动更新。 import { reacti…...

微信小程序:input双向绑定

微信小程序&#xff1a;input双向绑定 微信小程序&#xff1a;input双向绑定1 数据容器准备2 输入组件准备3 逻辑代码准备4 总结实战示例1.wxml文件导入2.js文件导入 微信小程序&#xff1a;input双向绑定 <说明> PS&#xff1a;该笔记采用渐进式编程&#xff0c;使每一步…...

RT-Thread ADC_DMA

看到这里&#xff0c;相信大家已经尝试过网上各类ADC_DMA传输的文章&#xff0c;且大多都并不能实现&#xff0c;因为在RT-Thread中并没有找到关于ADC的DMA接口&#xff0c;在官方例程中有关DMA的传输也只有一个串口接收的介绍&#xff0c;找遍全网怕也没能找到真正有用的消息。…...

生成带依赖Jar 包的两种常用方式:IDEA打包工具:Artifacts 和 maven-shade-plugin

文章目录 前言1、IDEA打包工具&#xff1a;Artifacts1.1 创建Artifacts1.2 选择第三方jar文件1.3 打包Artifacts1.4 测试jar包 2、maven-shade-plugin2.1、pom文件添加2.2、打包2.3、测试jar包 总结 前言 当我们编写完Java程序后&#xff0c;为了提高执行效率通常会将应用程序…...

idea 插件开发日志绑定问题

错误日志 Searchable options index builder completed SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/gradle/caches/modules-2/files-2.1/com.jetbrains.intellij.idea/ideaIC/2021.2/b0727ceddea2b62b16825db9308e14a470198…...

Elasticsearch(ES)概述

文章目录 一.什么是Elasticsearch?1.正向索引和倒排索引2.Mysql和ES的概念对比3.安装elasticsearch、kibana 二.IK分词器三.索引库操作四.文档操作五.RestClient操作索引库1.初始化RestClient2.创建索引库3.删除索引库4.判断索引库是否存在 六.RestClient操作文档1.新增文档2.…...

网络入门---网络编程初步认识和实践

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用&#xff0c;ip地址和MAC地址在网络通信时…...

Linux系统安装Docker-根据官方教程教程(以Ubuntu为例)

Linux系统安装Docker-根据官方教程教程&#xff08;以Ubuntu为例&#xff09; 1. 背景介绍2. 环境配置2.1 软件环境要求2.2 软件下载2.3 文档地址2.3 必备命令工具下载 3. 安装Docker3.1 使用root用户操作后续命令3.2 卸载可能存在的旧版本 4. 安装Docker4.1 更新依赖包4.2 配置…...

2023-12-03 LeetCode每日一题(可获得的最大点数)

2023-12-03每日一题 一、题目编号 1423. 可获得的最大点数二、题目链接 点击跳转到题目位置 三、题目描述 几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#x…...

【唐山海德教育】安全员b证的考试科目

安全员b证考试内容包括对安全生产知识和管理能力考核&#xff0c;采用书面或计算机闭卷考试方式&#xff0c;内容包括安全生产法律法规、安全管理和安全技术等内容。其中&#xff0c;法律法规占50%&#xff0c;安全管理占40%&#xff0c;土建综合安全技术占6%&#xff0c;机械设…...

吉他初学者学习网站搭建系列(4)——如何查询和弦图

文章目录 背景实现ChordDbvexchords 背景 作为吉他初学者&#xff0c;如何根据和弦名快速查到和弦图是一个必不可少的功能。以往也许你会去翻和弦的书籍查询&#xff0c;像查新华字典那样&#xff0c;但是有了互联网后我们不必那样&#xff0c;只需要在网页上输入和弦名&#…...

九章量子计算机:探索量子世界的革命性工具

九章量子计算机:探索量子世界的革命性工具 一、引言 九章量子计算机的推出,是近年来科技界最为引人瞩目的成就之一。这款基于量子力学的计算机,以其独特的计算方式和潜在的应用前景,引发了全球范围内的关注和讨论。本文将深入探讨九章量子计算机的原理、技术特点、应用前景…...

在 Linux 上修改 Oracle 控制文件、日志文件和数据文件的目录的脚本

以下是一个交互式的 Bash 脚本示例&#xff0c;用于在 Linux 上修改 Oracle 数据库控制文件、日志文件和数据文件的目录。脚本会要求您输入要修改的路径&#xff0c;并根据输入的路径执行相应的修改操作。 #!/bin/bash# 修改以下变量以匹配您的 Oracle 数据库设置 ORACLE_SID&…...

JavaScript 延迟加载的艺术:按需加载的最佳实践

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

HTML之实体和标签

HTML之实体和标签 实体标签meta标签语义化标签列表超链接 实体 如果我们需要在网页中书写一些特殊符号&#xff0c;则需要在html中使用【实体】&#xff08;转义符&#xff09; 实体语法&#xff1a; &实体的名字; <!DOCTYPE html> <html lang"en"> …...

【小布_ORACLE笔记】Part11-1--RMAN Backups

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…...

卷积神经网络-3D医疗影像识别

文章目录 一、前言二、前期工作1. 介绍2. 加载和预处理数据 二、构建训练和验证集三、数据增强四、数据可视化五、构建3D卷积神经网络模型六、训练模型七、可视化模型性能八、对单次 CT 扫描进行预测 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&a…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...