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

32GPIO输入LED闪烁蜂鸣器

一.GPIO简介

所有的GPIO都挂载到APB2上,每个GPIO有16个引脚

内核可以通过APB2对寄存器进行读写,寄存器都是32位的,但每个引脚端口只有16位

驱动器用于增加信号的驱动能力

二.具体电路结构



-------------------------------------------------------------------------------------------------------------------------

保护二极管:

如果IO引脚输入电压高于3.3V,那么上面的二极管就会导通,电流会流到VDD

如果IO引脚输入电压低于0V,那么下面的二极管就会导通,电流会流到VSS

如果IO引脚输入电压在0-3.3V之间,那么电流会流到内部电路

这里设置的上下拉电阻,是为了防止设备进入浮空状态,

在使用浮空输入是,端口一定要接上一个连续的驱动源,不能出现悬空状态

-------------------------------------------------------------------------------------------------------------------------

施密特触发器的执行逻辑

如果输入电压大于某一阈值,输出就会瞬间升为高电平

如果输入电压小于某一阈值,输出就会瞬间降为低电平

-------------------------------------------------------------------------------------------------------------------------

推挽模式

所以可以叫强推输出模式

-------------------------------------------------------------------------------------------------------------------------

开漏模式

上面的MOS管会断开,所以只有低电平有驱动能力,高电平没有驱动能力,可以作为通信协议的驱动方式,I2C通信的引脚就是使用的开漏模式,可以避免多个设备的干扰

开漏模式还可以输出5V的电平信号

-------------------------------------------------------------------------------------------------------------------------

三.具体的GPIO模式

一个端口只能有一个输出,但可以有多个输入

四.GPIO的寄存器

GPIO配置寄存器

每个端口的模式由4位进行配置,16个端口需要64位,所以配置寄存器有2个(CRL,CRH)

目的是为了低功耗和稳定性

可以实现同时对多个端口进行位设置和位清除,可以保障位设置和位清除的同步性

但BSRR也可以结合BRR进行先位设置再位清除

五.stm32外部的设备和电路

六.代码实现

一.点亮LED

#include "stm32f10x.h"                  // Device header
//#include "Delay.h"                  
int main()
{GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);while(1){
//        GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);}}

二.LED闪烁

#include "stm32f10x.h"                  // Device header
#include "Delay.h"                  
int main()
{GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);Delay_ms(500);}}

三种LED闪烁书写方式, 最后一种的0和1要转换类型

三.LED流水灯

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;				//GPIO引脚,赋值为第0号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数//函数内部会自动根据结构体的参数配置相应寄存器//实现GPIOA的初始化/*主循环,循环体内的代码会一直循环执行*/while (1){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);}
}

四.蜂鸣器

使用GPIOB_PB12端口

#include "stm32f10x.h"                  // Device header
#include "Delay.h"                  
int main()
{GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);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);}}

相关文章:

32GPIO输入LED闪烁蜂鸣器

一.GPIO简介 所有的GPIO都挂载到APB2上,每个GPIO有16个引脚 内核可以通过APB2对寄存器进行读写,寄存器都是32位的,但每个引脚端口只有16位 驱动器用于增加信号的驱动能力 二.具体…...

Qt|QPushButton控件讲解

前提 按钮分为了四种状态:常态、聚焦、按下、禁用 前一段时间更新了MFC框架下CButton的自绘。因为MFC框架下的按钮限制性很高,所以只能由自绘实现各种风格,但是QT框架完美的解决了这个问题,我们只需要了解如何调用,就…...

再学webpack

1 优化 webpack 打包体积的思路 优化 webpack 打包体积的思路包括: 提取第三方库或通过引用外部文件的方式引入第三方库:将第三方库单独打包,并通过 CDN 引入,减少打包体积。使用代码压缩插件:例如 UglifyJsPlugin&a…...

systemd:service与target使用及相关命令

文章目录 一、 unit1.1 unit常用命令 二、 service系统服务2.1 unit service配置文件2.1.1 [Unit]区块2.1.2 [Service]区块2.1.3 [Install]区块2.1.4 示例介绍 2.2 service常用命令 三、target3.1 tartget有关命令 四、其他系统命令4.1 systemctl 相关系统管理命令4.2 journalc…...

FairGuard游戏加固入选《CCSIP 2023中国网络安全行业全景册(第六版)》

2024年1月24日, FreeBuf咨询正式发布《CCSIP 2023中国网络安全行业全景册(第六版)》。本次发布的全景图,共计展示20个一级分类、108个细分安全领域,旨在为广大企业提供网络安全产品选型参考,帮助企业了解中国网络安全技术与市场的…...

文心一言 VS ChatGPT :谁是更好的选择?

前言 目前各种大模型、人工智能相关内容覆盖了朋友圈已经各种媒体平台,对于Ai目前来看只能说各有千秋。GPT的算法迭代是最先进的,但是它毕竟属于国外产品,有着网络限制、注册限制、会员费高昂等弊端,难以让国内用户享受。文心一言…...

七街八巷×实在RPA丨财务凭证录入零出错,效率提升8倍

在如今的数字化时代,企业财务面临着海量且复杂的数据流程。特别是在凭证录入这一看似简单却又频繁的环节中,传统的手工操作已无法满足日益增长的业务需求。 中国轻食知名品牌七街八巷,通过部署实在智能集“自动化平台开箱即用解决方案咨询”…...

线性代数----------学习记录

线性代数发展历程 (1)线性方程组:例如二元一次方程组; (2)行列式:determinant,克莱默,莱布尼兹; (3)矩阵:方程个数与未知数的个数可…...

Ubuntu如何安装使用Nginx反向代理?

在Ubuntu上安装Nginx并配置使其生效是相对简单的过程。以下是一步一步的指南: 步骤 1:安装 Nginx 打开终端,并执行以下命令来安装 Nginx: sudo apt update sudo apt install nginx步骤 2:启动 Nginx 服务 安装完成…...

Linux系统——正则表达式

有一段时间本机访问量过高,如何查看日志提取出访问量前十的信息 1.使用提取命令(cut、awk、sed)提取出ip地址的那一列 2.使用sort按数字排序,将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最…...

【文本到上下文 #9】NLP中的BERT和迁移学习

​ ​ 一、说明 ​BERT:适合所有人的架构概述:我们将分解 BERT 的核心组件,解释该模型如何改变机器理解人类语言的方式,以及为什么它比以前的模型有重大进步。    ​BERT的变体: 在BERT取得成功之后,已…...

github单文件下载——DownGit

记录一下一个好用的网站,支持github中某一特定文件夹下文件的下载 选择一个合适的梯子,访问Downgit网址 https://minhaskamal.github.io/DownGit/#/home 将所需网站连接粘贴到这里,点击download即可...

Java之Stream的应用与原理分析

前言 stream是怎么做到一次迭代中将所有流操作进行叠加?stream怎么做到只有在终止操作时进行元素遍历?那中间操作是做了些什么? Stream 与集合的区别 集合是内存中的数据结构抽象,描述了数据在内存中是如何存储的。流描述了对数据…...

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支,本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 前言 主要总结工作中的疑惑点,如果你也有相应的场景,可以评论区见&…...

iperf3 打流工具的使用介绍

目录 1. iperf3简介 2. 详细命令参数 1. iperf3简介 iPerf3是用于主动测试IP网络上最大可用带宽的工具。它支持时序、缓冲区、协议(TCP,UDP,SCTP与IPv4和IPv6)有关的各种参数。对于每次测试,它都会详细的带宽报告&a…...

网络异常案例一_RST

本文以及后面几篇会整理输出下以前处理过的一些网络相关的异常 4G定向卡上网问题 问题现象,自研路由器,使用运营商定向的4G卡上网,访问服务器异常,相应的开发同学反馈被服务器拒绝了; 复现问题,同步在cli…...

提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023

作为全球领先的PDF编辑软件,Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户,Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…...

清空在Linux系统上的操作记录

在Linux中,操作记录通常涉及到不同的系统组件,包括bash shell的历史命令记录、系统日志文件等。以下是如何清除一些常见记录的步骤: 1. 清空bash历史命令记录history -c # 清除当前用户的bash历史记录rm -f ~/.bash_history # 删除保存在用户…...

Java链表(2)

🐵本篇文章将对双向链表进行讲解,模拟实现双向链表的常用方法 一、什么是双向链表 双向链表在指针域上相较于单链表,每一个节点多了一个指向前驱节点的引用prev以及多了指向最后一个节点的引用last: 二、双向链表的模拟实现 首先…...

Python qt.qpa.xcb: could not connect to display解决办法

遇到问题:qt.qpa.xcb: could not connect to display 解决办法,在命令行输入: export DISPLAY:0 然后重新跑python程序,解决! 参考博客:qt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could …...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...