当前位置: 首页 > 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;错别字可…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...