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

3.2 LED闪烁流水灯蜂鸣器

  1. LED闪烁

1.1 电路连接示意图

LED采用低电平点亮的方式,利用ST-Link的3.3V进行供电。

1.2程序设计

1.21知识储备

GPIO配置步骤步骤:

1. 第⼀步,使⽤RCC开启GPIO的时钟

2. 第⼆步,使⽤GPIO_Init()函数初始化GPIO

3. 第三步,使⽤输出或者输⼊的函数控制GPIO口

常⽤的RCC库函数

开启时钟

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph,FunctionalStateNewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph,FunctionalStateNewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph,FunctionalStateNewState);

其中包含两个参数:参数1:选择外设,参数2:使能或者失能

常用的GPIO库函数

  • 复位GPIO外设函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx);

调用函数,所指定的GPIO外设就会被复位。

  • 复位AFIO外设函数

void GPIO_AFIODeInit(void);
  • 初始化GPIO⼜函数

⽤结构体的参数来初始化GPIO口,先定义⼀个结构体变量,然后把再给结构体赋值,最后调⽤此函数,函数内部会⾃动读取结构体的值,然后⾃动把外设的各个参数配置好。

void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypedef*GPIO_InitStruct);
  • 为GPIO结构体变量赋一个默认值

void GPIO_StructInit(GPIO_InitTypedef* GPIO_InitTypedef);
  • GPIO的4个输入函数

读取输⼊数据寄存器某端口的输⼊值,返回值是⾼低电平函数

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

读取GPIO的每⼀位,返回值是16位的数据,每⼀位代表⼀个端⼜值

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

读取输出数据寄存器的某⼀位

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

读取整个输出寄存器

uint16_t GPIO_ReadOutputData(GPIO_InitTypedef* GPIOx);
  • GPIO的4个输出函数

把指定的端口设置为⾼电平

void GPIO_SetBits(GPIO_InitTypedef* GPIOx,uint16_t GPIO_Pin);

把指定的端口设置为低电平

void GPIO_ResetBits(GPIO_InitTypedef* GPIOx,uint16_t GPIO_Pin);

根据第三个参数的值来设置电平

void GPIO_WriteBit(GPIO_InitTypedef* GPIOx,uint16_t GPIO_Pin,BitAction BitVal);

对GPIOx的16个端口同时进⾏写⼊操作:

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

1.22 小灯闪烁

约定低电平点亮,高电平熄灭

配置好GPIO后,再循环内点亮LED延时一段时间,再熄灭LED

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//两个参数1.点亮PA0口 2.开启时钟GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体(局部变量)//结构体成员GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//使用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选择GPIO外设的0号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//配置输出速度GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO初始化结构体的地址while (1){GPIO_ResetBits(GPIOA, GPIO_Pin_0);//把指定的端口设置为低电平,点亮LEDDelay_ms(500);//延时GPIO_SetBits(GPIOA, GPIO_Pin_0); //把指定的端口设置为高电平,熄灭LEDDelay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//Bit_RESET置低电平Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);// Bit_SET置高电平Delay_ms(500);//若给具体的数,1是高电平,0是低电平需要加上强制类型转换,将0和1转换为枚举类型GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);Delay_ms(500);}
}

注意:在推挽输出模式下,⾼低电平都具有驱动能⼒,开漏输出模式的高电平是没有驱动能⼒的,开漏输出模式的低电平具有驱动能力。

2. LED流水灯

2.1 电路连接示意图

2.2 程序设计

16个端口依次点亮熄灭,延时100ms

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//两个参数1.点亮PA0口 2.开启时钟GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体(局部变量)//结构体成员GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//使用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//选择GPIO外设的16个端口GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//配置输出速度GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO初始化结构体的地址while (1){//0x0001就是指向GPIO_Pin_XXX ,加上按位取反 那么则可以低电平点亮GPIO_Write(GPIOA, ~0x0001);    //0000 0000 0000 0001Delay_ms(100);GPIO_Write(GPIOA, ~0x0002);    //0000 0000 0000 0010Delay_ms(100);GPIO_Write(GPIOA, ~0x0004);    //0000 0000 0000 0100Delay_ms(100);GPIO_Write(GPIOA, ~0x0008);    //0000 0000 0000 1000Delay_ms(100);GPIO_Write(GPIOA, ~0x0010);    //0000 0000 0001 0000Delay_ms(100);GPIO_Write(GPIOA, ~0x0020);    //0000 0000 0010 0000Delay_ms(100);GPIO_Write(GPIOA, ~0x0040);    //0000 0000 0100 0000Delay_ms(100);GPIO_Write(GPIOA, ~0x0080);    //0000 0000 1000 0000Delay_ms(100);//GPIO_Write(GPIOA,~0x0001<<i);//Delay_ms(100);}
}

3. 蜂鸣器

3.1 电路连接示意图

3.2 程序设计

使用PB12号端口,给PB12输出低电平,蜂鸣器响,输出高电平,蜂鸣器不响。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启时钟GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体(局部变量)//结构体成员GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//使用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//选择GPIO外设的16个端口GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//配置输出速度GPIO_Init(GPIOB, &GPIO_InitStructure);//GPIO初始化结构体的地址while (1){GPIO_ResetBits(GPIOB, GPIO_Pin_12);//低电平响,高电平不响。Delay_ms(100);GPIO_SetBits(GPIOB, GPIO_Pin_12);Delay_ms(100);GPIO_ResetBits(GPIOB, GPIO_Pin_12);Delay_ms(100);GPIO_SetBits(GPIOB, GPIO_Pin_12);//三短一长 声音效果体验Delay_ms(700);}
}

相关文章:

3.2 LED闪烁流水灯蜂鸣器

LED闪烁1.1 电路连接示意图LED采用低电平点亮的方式&#xff0c;利用ST-Link的3.3V进行供电。1.2程序设计1.21知识储备GPIO配置步骤步骤&#xff1a;1. 第⼀步&#xff0c;使⽤RCC开启GPIO的时钟2. 第⼆步&#xff0c;使⽤GPIO_Init()函数初始化GPIO3. 第三步&#xff0c;使⽤输…...

刷题笔记3 | 203. 移除链表元素、707设计链表,206.反转链表

目录 203. 移除链表元素 707、设计链表 206.反转链表 203. 移除链表元素 题意&#xff1a;删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#xff1a;h…...

[一篇读懂]C语言十一讲:单链表的删除和单链表真题实战

[一篇读懂]C语言十一讲&#xff1a;单链表的删除和单链表真题实战1. 与408关联解析及本节内容介绍1 本节内容介绍2. 单链表的删除操作实战3. 单链表真题解读与解题设计1 题目解读2 解题设计第一阶段&#xff1a;双指针找中间结点第二阶段&#xff1a;原地逆置第三阶段&#xff…...

【C++初阶】list的使用

大家好我是沐曦希&#x1f495; 文章目录一、前言二、构造三、迭代器四、增删查改1.头插头删2.尾插尾删3.查找和插入4.删除五、其他成员函数1.排序和去重2.splice和remove3.resize一、前言 list本质是带头双向循环链表&#xff0c;本文只对list的一些常用接口进行说明&#xf…...

HTML 布局

网页布局对改善网站的外观非常重要。 请慎重设计您的网页布局。 在线实例 使用 <div> 元素的网页布局 如何使用 <div> 元素添加布局。 使用 <table> 元素的网页布局 如何使用 <table> 元素添加布局。 网站布局 大多数网站会把内容安排到多个列中&a…...

如何在虚拟机中安装ikuai软路由系统

首先访问ikuai官网下载固件固件下载-爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com) 根据需求下载 然后创建一个虚拟机&#xff0c;点击下一步 选择更下载的ISO映像文件&#xff0c;点击下一步 点击下一步 设置一下名称和储存位置&#xff0c;点击下一步 根据需求设置&a…...

Java 多线程 --- 线程协作 wait/notify

Java 多线程 --- 线程协作 wait/notifywait / notifyObject.wait() , Object.notify() / notifyAll()notify 和 wait 的原理notify会导致死锁的问题wait / notify的开销以及问题wait / notify 在多线程中, 如果程序拿到锁之后, 但是没有满足指定条件而不能继续往下执行, 我们可…...

【PyTorch】教程:torch.nn.Hardsigmoid

torch.nn.Hardsigmoid 原型 CLASS torch.nn.Hardsigmoid(inplaceFalse) 参数 inplace (bool) – 默认为 False 定义 Hardsigmoid(x){0if x≤−3,1if x≥3,x/61/2otherwise\text{Hardsigmoid}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ 1 & \text{if~} x \ge 3…...

【手把手一起学习】(八) Altium Designer 20修改和自定义原理图标题栏

1 修改原理图标题栏 直接对原理图标题栏属性进行修改&#xff0c;操作如图所示&#xff1a; 修改后&#xff0c;并不会显示&#xff0c;故该方法不可用&#xff1a; 正确的操作如下&#xff0c;先选择合适的模板&#xff1a; 然后&#xff0c;进行属性的修改&#xff1a; 此时…...

业务流程测试

用例设计主要问题主要问题存在于&#xff1a;1、测试点分析&#xff1a;逻辑性不强对于整个页面功能划分不清晰&#xff1b;不同测试点归类不清晰&#xff1b;不能形成相对固定的套路&#xff0c;书写耗费大量时间...2、测试用例&#xff1a;关于&#xff0c;要细致到什么程度&…...

[极客大挑战 2019]EasySQL 1

[极客大挑战 2019]EasySQL 1解题POC一、解题思路之暴力破解1. 弱口令2. 暴力破解二、解题思路之万能密码1. 什么是万能密码2. 测试过程解题POC 直接点击登录获取flagflag{62f0d2ca-579e-450e-941f-5f7c23a8baf7} 一、解题思路之暴力破解 这题是万能密码&#xff0c;所以暴力破解…...

vulnhub raven2复现

1.扫描全网段&#xff0c;找出了存活主机ip为192.168.85.144 nmap 192.168.85.0/24 2.nmap扫描端口 nmap -p1-65535 192.168.85.144 3.访问此网站&#xff0c;没找到什么地方可以利用漏洞 &#xff0c;查看中间件为wordpress 4.使用dirb对该网站进行目录扫描 dirb http://1…...

LeetCode 剑指 Offer II 079. 所有子集

给定一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[1],[2],[1,2],[3…...

打印名片-课后程序(Python程序开发案例教程-黑马程序员编著-第二章-课后作业)

实例3&#xff1a;文本进度条 进度条以动态方式实时显示计算机处理任务时的进度&#xff0c;它一般由已完成任务量与剩余未完成任务量的大小组成。本实例要求编写程序&#xff0c;实现图1所示的进度条动态显示的效果。 下载中下载完成图1文本进度条 实例分析 在本实例中可以将…...

为什么我们在判断字符串不为null后还要判断字符串长度大于0?

我们在做字符串判断时一般会&#xff1a; if (s ! null && s.length() > 0) {} 但是我就在想&#xff0c;字符串不为空了&#xff0c;那么他一定有值&#xff0c;字符串长度不就大于0吗&#xff0c;所以s.length()>0是不是有点多余&#xff1f; 我的思维误区是…...

javaEE 初阶 — 应用层中的 DNS 协议(域名解析系统)

文章目录什么是域名1. 如何建立 域名 与 IP 的对应关系2. 域名的分级什么是域名 域名也就是平常所说的网址&#xff0c;比如 www.baidu.com。 其实网络上的服务器要访问这个网址&#xff0c;需要的是 IP 地址。、 但是 IP 地址比较拗口不方便记忆&#xff0c;于是就有使用一些…...

【网络】-- 网络编程套接字(铺垫、预备)

目录 理解源IP地址和目的IP地址 认识端口号 端口号 理解源端口号和目的端口号 套接字 认识TCP与UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 理解源IP地址和目的IP地址 就如同我们唐僧的取经路&#xff1a; 唐僧的出发地到目的地&#xff1a;东…...

一文打通@SentinelResource

Sentinel 提供了 SentinelResource 注解用于定义资源&#xff0c;并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等 如果使用的是Sentinel Annotation AspectJ Extension&#xff0c;需要导这个依赖 <dependency><groupId>com.alibaba.csp</…...

苹果手机备份的文件在电脑什么地方 苹果备份文件怎么查看

在这个网络信息时代&#xff0c;为手机进行定期备份已经成为了家常便饭。在使用备份软件对苹果手机进行备份后&#xff0c;苹果手机备份的文件在什么地方&#xff0c;苹果备份文件怎么查看呢&#xff1f;本文就带大家来了解一下。 一、苹果手机备份的文件在电脑什么地方 大家…...

【MySQL速通篇001】5000字超详细介绍MySQL部分重要知识点

&#x1f340; 写在前面 这篇5000多字博客也花了我几天的时间&#x1f602;&#xff0c;主要是我对MySQL一部分重要知识点的理解【后面当然还会写博客补充噻&#xff0c;欢迎关注我哟】&#xff0c;当然这篇文章可能也会有不恰当的地方【毕竟也写了这么多字&#xff0c;错别字可…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...