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 …...
2025届毕业生推荐的十大AI辅助论文工具解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在开题报告撰写进程当中,人工智能技术能够起到高效辅助功效。其一,凭…...
(五)数据仓库越做越乱?问题可能出在“命名”上
数据仓库做大之后,最先“失控”的往往不是数据,而是命名。命名规范看似细节,却直接决定了数据是否好找、好用、好维护。 作为数据湖仓设计与实践系列文章第 5 篇,本文从实际使用出发,梳理了表与字段命名的核心方法&am…...
北外滩餐饮新店突围战:揭秘AI大模型如何让搜索流量“精准上门”
如果你是北外滩一位新开业的餐厅老板,是否正面临这样的困境:店铺装修精美、菜品独具匠心,但门口罗雀,预期的客流迟迟不来?你试过在平台买推广、请达人探店,效果却如昙花一现,成本居高不下&#…...
【无标题】一次简笔
我是一名大一的学生,我未来想要从事计算机方面的工作。我充满理想有自信,相信我可以找到一份3w的工作,我想要到腾讯当技术岗位,我愿意花费精力和时间在这方面学习编程。我会每周拿出六天时间来潜心学习。“what doesnt kill me ma…...
重新定义AI时代的敏态与稳态:ArkClaw与HiAgent的双轮进化
4月2日,2026火山引擎AI创新巡展・武汉站正式启幕。火山引擎总裁谭待在宣布截至2026年3月,豆包大模型日均Token使用量突破120万亿,三个月翻倍、较2024年5月豆包问世增长了1000倍的同时,提出了以ArkClaw为敏态Agent、HiAgent为稳态A…...
使用 Applications Manager 实现 AWS 云监控:保障业务应用高效运行
随着企业加速将应用和服务迁移至云端,Amazon Web Services(AWS)凭借其可扩展性、可靠性及成本效益,成为主流选择。然而,云环境日益复杂,企业亟需强大的监控系统,以确保应用稳定运行。Applicatio…...
美元、日元、欧元怎么选?外汇新手该从哪个货币对开始?
最近有不少刚接触外汇交易的朋友问我同一个问题:美元、日元、欧元这些主流货币到底该怎么选?作为一个过来人,我想说的是——选对起步品种,比你想象中重要得多。 很多新手一上来就想着“赚快钱”,直接冲进波动剧烈的交叉…...
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 你是否曾经为PCB设计文件的查看而烦恼&#…...
React Native Boilerplate组件库终极指南:AssetByVariant与IconByVariant高级用法
React Native Boilerplate组件库终极指南:AssetByVariant与IconByVariant高级用法 【免费下载链接】react-native-boilerplate A React Native template for building solid applications 🐙, using JavaScript 💛 or Typescript Ὁ…...
Kando测试框架完全指南:Mocha和Chai的终极使用技巧
Kando测试框架完全指南:Mocha和Chai的终极使用技巧 【免费下载链接】kando 🌸 Do things with utmost efficiency. 项目地址: https://gitcode.com/gh_mirrors/ka/kando Kando是一款跨平台的饼状菜单桌面工具,它为用户提供了高效、直观…...
