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);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go】深入理解 Go map:赋值和扩容迁移 ①

文章目录 map底层实现hmapbmap map hash冲突了怎么办? map扩容触发扩容时机扩容小结为什么map扩容选择增量(渐进式扩容)?迁移是逐步进行的。那如果在途中又要扩容了,怎么办? map翻倍扩容原理 map写入数据内…

数据库查询3

目录 1. 多表查询 1.1.1 介绍 1.1.2 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 2. 事务 2.1 操作 2.2 四大特性 数据库总结2 数据库总结1 1. 多表查询 1.1.1 介绍 多表查询&#xff…

Compose | UI组件(四) | Icon(),Image() 图标和图片组件

文章目录 Icon 图标组件简介Icon 图标组件例子 Image 图片组件简介Image 图片组件例子colorFilter 实现不同效果 总结 Icon 图标组件简介 显示一系列图标 Composable fun Icon(imageVector: ImageVector, //矢量图,可以显示SVG格式的图标contentDescription: …

1170. 排队布局(差分约束,spfa,负环)

1170. 排队布局 - AcWing题库 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。 农夫约翰有 N 头奶牛,编号从 1 到 N,沿一条直线站着等候喂食。 奶牛排在队伍中的顺序和它们的编号是相同的。 因为奶牛相当苗条,所以可能有两…

研发日记,Matlab/Simulink避坑指南(七)——数据溢出钳位Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《研发日记,Matlab/Simulink避坑指南(三)——向上取整Bug》 见《研发日记,Matlab/Simulink避坑…

【每日一题】YACS 243:5G通讯

题目描述 这是上海计算机学会竞赛 P 243 P243 P243:5G通讯( 2020 2020 2020年 9 9 9月月赛 乙组 T 2 T2 T2)标签:二分查找题意:给定 n n n个点,第 i i i个点的坐标为 x i x_i xi​。给定限制 d d d&#…

C语言第十一弹---函数(下)

​ ✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 函数 1、嵌套调用和链式访问 1.1、嵌套调用 1.2、链式访问 2、函数的声明和定义 2.1、单个文件 2.2、多个文件 2.3、static 和 extern 2.3.1、static…

速盾网络:CDN防盗链策略有哪些

随着互联网的迅猛发展,内容盗链问题也日益严重。为了保护网站内容的安全和版权,CDN防盗链策略成为了许多网站和内容提供者的首选。本文将介绍CDN防盗链的概念和原理,并详细介绍了几种常见的CDN防盗链策略和实施方法。 随着技术的进步和互联网…

【自然语言处理】【深度学习】文本向量化、one-hot、word embedding编码

因为文本不能够直接被模型计算,所以需要将其转化为向量 把文本转化为向量有两种方式: 转化为one-hot编码转化为word embedding 一、one-hot 编码 在one-hot编码中,每一个token使用一个长度为N的向量表示,N表示词典的数量。 即&…

dos攻击与ddos攻击的区别

①DOS攻击: DOS:中文名称是拒绝服务,一切能引起DOS行为的攻击都被称为dos攻击。该攻击的效果是使得计算机或网络无法提供正常的服务。常见的DOS攻击有针对计算机网络带宽和连通性的攻击。 DOS是单机于单机之间的攻击。 DOS攻击的原理&#…

[lighttpd]lighttpd配置http强制跳转https

参考链接 HowToRedirectHttpToHttps - Lighttpd - lighty labs lighttpd版本 / # lighttpd -h lighttpd/1.4.59 (ssl) - a light and fast webserver usage:-f <name> filename of the config-file-m <name> module directory (default: /usr/lib)-i <secs…

【GitHub项目推荐--常见的国内镜像】【转载】

由于国内网络原因&#xff0c;下载依赖包或者软件&#xff0c;对于不少互联网从业者来说&#xff0c;都有不小的挑战&#xff0c;时间浪费在这上边&#xff0c;实在可惜。这个项目介绍了常见依赖&#xff0c;软件的国内镜像&#xff0c;助力大家畅爽编码。 这是一个归纳梳理类…

C# 将HTML网页、HTML字符串转换为PDF

将HTML转换为PDF可实现格式保留、可靠打印、文档归档等多种用途&#xff0c;满足不同领域和情境下的需求。本文将通过以下两个示例&#xff0c;演示如何使用第三方库Spire.PDF for .NET和QT插件在C# 中将Html 网页&#xff08;URL&#xff09;或HTML字符串转为PDF文件。 HTML转…

【C语言/数据结构】排序(选择排序,推排序,冒泡排序)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​​​ 目录 选择排序 选择排序 ​编辑…

JAVA学习笔记6(常用结构与数组)

1.选择结构 1.if语句&#xff1a; if(条件表达式){ 一条或多条语句 }; 2.if else语句&#xff1a; if(条件表达式) {语句块1} else {语句块2} 3.switch语句&#xff1a; switch(表达式){​​​​​​​ case 常量表达式1:语句组;break;​​​​​​​ ​​​​…

js实现动漫拼图2.0版

比较与1.0版&#xff0c;2.0版就更像与华容道类似的拼图游戏&#xff0c;从头到尾都只能控制白色块移动&#xff0c;而且打乱拼图和求助的实现与1.0都不相同 文章目录 1 实现效果2 实现思路2.1 打乱拼图2.2 求助功能2.3 判赢 3 代码实现 js实现动漫拼图1.0版 https://blog.csdn…

【工作技术栈】基于注解的redis分布式锁(支持SPEL细粒度+redisson可重入功能)

这里写目录标题 前言基于注解的reids分布式锁感悟 前言 刚开始我们使用的redis工具是自己写的&#xff0c;因为觉得redisson没必要&#xff08;其实是没有人想因为自己不懂redisson导致线上问题吧。。。毕竟公共组件&#xff09; 这个就是目前我们用的&#xff0c;手写简易lua…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-菜单管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

cmake-find_package链接第三方库

文章目录 基本调用形式和模块模式使用方式 之前我们是使用了绝对路径来链接OpenCV第三方库&#xff0c;但是现在很多库一般会自己写一些cmake文件提供给用户&#xff0c;用户可以直接使用其中的内置变量即可。使用的命令就是find_package。 基本调用形式和模块模式 find_packa…

【RTP】webrtc 学习2: webrtc对h264的rtp打包

切片只是拷贝帧的split的各个部分到新的rtp 包的封装中。并没有在rtp包本身标记是否为关键帧FU-A 切片 输入的H.264 数据进行split :SplitNalu SplitNalu : 按照最大1200字节进行切分 切分后会返回一个数组 对于FU-A :split的数据总大小是 去掉一个字节的nalu header size …