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速度,赋值为50MHz
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOA的初始化
	
	/*主循环,循环体内的代码会一直循环执行*/
	while (1)
	{
		GPIO_Write(GPIOA,~0x0001);//0000 0000 0000 0001
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0002);//0000 0000 0000 0010
		Delay_ms(100);	
		GPIO_Write(GPIOA,~0x0004);//0000 0000 0000 0100
		Delay_ms(100);	
		GPIO_Write(GPIOA,~0x0008);//0000 0000 0000 1000
		Delay_ms(100);	
		GPIO_Write(GPIOA,~0x0010);//0000 0000 0001 0000
		Delay_ms(100);	
		GPIO_Write(GPIOA,~0x0020);//0000 0000 0010 0000
		Delay_ms(100);	
		GPIO_Write(GPIOA,~0x0040);//0000 0000 0100 0000
		Delay_ms(100);	
		GPIO_Write(GPIOA,~0x0080);//0000 0000 1000 0000
		Delay_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);
		
	}
	
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何将数据转化为可操作的业务洞察_光点科技

在数字化的商业环境中,企业被海量的数据所包围。从社交媒体互动、销售交易记录到客户反馈,每一项数据都蕴含着潜在的业务价值。然而,数据本身并不能直接为企业带来改变,它需要被转化为可行的业务洞察,才能指导实际的决…

来聊聊SSL证书申请流程

第一步:选择合适的SSL证书类型 在申请SSL证书之前,您需要选择适合您网站需求的SSL证书类型。一般分为单域名证书、多域名证书和通配符证书等。根据您的网站结构和需求选择合适的证书类型。 第二步:准备必要的证书申请材料 在申请SSL证书时&…

用Python库pillow处理图像

入门知识 颜色。如果你有使用颜料画画的经历,那么一定知道混合红、黄、蓝三种颜料可以得到其他的颜色,事实上这三种颜色就是美术中的三原色,它们是不能再分解的基本颜色。在计算机中,我们可以将红、绿、蓝三种色光以不同的比例叠加…

类和对象 第六部分 继承 第一部分:继承的语法

一.继承的概念 继承是面向对象的三大特性之一 有些类与类之间存在特殊的关系,例如下图: 我们可以发现,下级别的成员除了拥有上一级的共性,还有自己的特性,这个时候,我们可以讨论利用继承的技术,…

LeetCode.2670. 找出不同元素数目差数组

题目 题目链接 分析 一种暴力的方法,枚举数组所有数字,分别计算当前元素前面不同的元素和后面不同的元素,然后相减即可。这样的话太暴力,前缀和后缀也需要分别遍历:O(N*2)了。 我们来优化一下: 根据这种…

【HarmonyOS应用开发】UIAbility实践第一部分(五)

一、UIAbility概述 1、UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 2、每一个UIAbility实例,都对应于一个最近任务列表中的任务。 3、一个应用可以有一个UI…

阿里云服务器租用价格 2024年新版活动报价及租用收费标准参考

阿里云服务器租用价格是多少?阿里云服务器价格由云服务器配置、实例规格、带宽等组成,进入2024年,阿里云继续推出各种云服务器优惠政策。轻量应用服务器2核2G 61元1年,每天只需0.16元,2核4G 165元1年,每天不…

IDEA:git 回滚本地提交-git 选择 Reset Current Branch to

前言 回滚提交到本地但是还没有 Push 上去的提交 选择我们要回滚的节点,然后点击 git 选择 Reset Current Branch to… 再选择 Hard 。当我们点击 Reset 的时候,代码就会回滚到单前选中的这个版本

Centos 7.9 在线安装 VirtualBox 7.0

1 访问 Linux_Downloads – Oracle VM VirtualBox 2 点击 ​the Oracle Linux repo file 复制 内容到 /etc/yum.repos.d/. 3 在 /etc/yum.repos.d/ 目录下新建 virtualbox.repo,复制内容到 virtualbox.repo 并 :wq 保存。 [rootlocalhost centos]# cd /etc/yum.rep…

Redis -- 常用数据结构,认识数据类型和编码方式

"人生就像骑自行车,要保持平衡,就必须保持前进。" — 爱因斯坦 说到数据结构,或许就能想到哈希表,列表集合等数据结构。对于redis来说对应的key的value的形式也可以是这些数据结构,如下: 针对上面…

vxe-table3.0的表格树如何做深层查找,返回搜索关键字的树形结构

vxe-table2.0版本是提供深层查找功能的,因为他的数据源本身就是树形结构,所以深层查找查询出来也是树形结构。 但是vxe-table3.0版本为了做虚拟树功能,将整个数据源由树形垂直结构变成了扁平结构,便不提供深层查询功能&#xff0c…

STM32——USART

一、通信 1.1通信是什么; 通信是将一个设备的数据发送到另一个设备中,从而实现硬件的扩展; 1.2通信的目的是什么; 实现硬件的扩展-在STM32中集成了很多功能,例如PWM输出,AD采集,定时器等&am…

关于maven项目构建的解释

在Idea中使用模块化构建项目 项目介绍: sky-take-out sky-common pom.xml sky-pojo pom.xml sky-server pom.xml pom.xml 说明 sky-server依赖sky-pojo和sky-common,继承sky-take-outsky-pojo继承sky-take-outsky-common继承sky-take-out 由于Idea编…

IntelliJ Idea实用插件推荐

目录 一、插件安装 二、常用插件 A、代码规范 Alibaba Java Coding Guidelines SonarLint B、快捷开发 aiXcoder-AI代码生成 AWS Toolkit-AI代码生成 CodeGeeX-AI代码生成 CodeGlance-代码缩略图 camelCase-格式转换 GsonFormatPlus-json代码生成 Sequence Giagram…

第六篇:express路由拆分(模块化)

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! ​ 目录 📘 引言: &#x…

如何保证绩效考核的准确性及公平性?

实施绩效考核是公司为了提高工作绩效,提高员工工作积极性,进而保证公司高效运行的必要手段。但是,在实际管理工作中,很难做到绩效考核的公平、公正,这就会导致员工工作热情不高,绩效考核无法发挥应有的作用…

负载均衡下的webshell连接

一、环境配置 1.在Ubuntu上配置docker环境 我们选择用Xshell来将环境资源上传到Ubuntu虚拟机上(比较简单) 我们选择在root模式下进行环境配置,先将资源文件复制到root下(如果你一开始就传输到root下就不用理会这个) …

MkDocs 部署指南

简介 MkDocs 可以同时编译多个 markdown 文件,形成书籍一样的文件。有多种主题供你选择,很适合项目使用。 MkDocs 是快速,简单和华丽的静态网站生成器,可以构建项目文档。文档源文件在 Markdown 编写,使用单个 YAML …

PMP备考笔记:模拟考试知识点总结

1. 答题思路:优先看问题,可节省时间。 2. 考试就按照考试的套路来做,不要过多考虑。 开发团队只专注当前冲刺目标,产品负责人对PB排优先级。 收集需求工具-原型法:能够让用户提前体验,减少返工的风险。 …

龙年开春,格蠹有礼——极客少年编程套餐疯狂来袭

YOUTH 龙年开春,格蠹有礼 极客少年编程套餐疯狂来袭 梁启超先生曾经说过:“少年强则国强,少年富则国富,少年智则国智。” 少年是国家的未来和希望,他们的成长和发展对国家的繁荣和发展具有重要意义。笔者曾在另一篇文章…