STM32学习笔记1---LED,蜂鸣器

news2024/11/25 0:29:34

目录

GPIO

LED

蜂鸣器

RCC外设

 GPIO外设

总概

操作STM32的GPIO

代码

LED闪烁

LED流水灯

蜂鸣器!

连接方式


GPIO

GPIO输出:向外驱动控制

GPIO输入:读取,捕获(信息)(控制)


右侧两个二级管,阻止不在0-3.3V的电压流入内部电路(通过VDD,VSS将异常电流抹消) 

上拉电阻VDD/下拉电阻VSS:给输入提供默认电平,防止处于浮空状态,输入数据易被干扰不确定。

上通下断,上拉输入模式(默认为高电平的输入模式)//

都断,浮空输入模式

施密特触发器:对输入电压进行整形

中间留一定范围,避免因信号波动造成的输出抖动

位设置/清除寄存器:单独操作寄存器某一位(一般,寄存器操作的16个端口只能整体读写)

两个MOS管:电子开关,信号控制的开关。

推挽:P-MOS,N-MOS均有效。寄存器为1,P-MOS通N-MOS断,接VDD,输出高电平。寄存器为0,N-MOS通P-MOS断,接VSS,输出低电平。

开漏:仅N-MOS有效,仅低电平有驱动能力。

关闭:都无效,输出关闭,外部控制电平


输出时可以进行输入操作,输入时不能进行输出操作

LED

长脚+,短脚-极

内部较小+,较大-

选择看IO口高低电平的驱动能力

GPIO在推挽输出模式下,高低电平均有比较强的驱动能力(均可)

很多单片机或者芯片,都使用了高电平弱驱动,低电平的强驱动的规则(第一种)

蜂鸣器

有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定

中间引脚接低电平(低电平触发):响。高电平:灭

(无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音)

PNP三极管驱动,基极给低电平,三极管导通

NPN三极管驱动,基极给高电平,三极管导通

RCC外设 , GPIO外设

RCC外设

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

 GPIO外设

void GPIO_DeInit(GPIO_TypeDef* GPIOx);//复位指定的GPIO外设
void GPIO_AFIODeInit(void);//复位AFIO外设
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);//结构体变量赋默认值
//读取函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
//写入函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//设置高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//设置低电平

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//可单个引脚操作
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//对16个端口进行写入操作

 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

用结构体的参数初始化GPIO口,要先定义一个结构体变量,然后再给结构体赋值,最后调用这个函数。这个函数内部就会自动读取结构体的值,然后自动把外设的各个参数配置好。

总概

\bigstar操作STM32的GPIO

        使用RCC开启GPIO的时钟 :

外设的寄存器只有在时钟信号存在时才能被访问和配置

        初始化GPIO :

定义结构体变量,用于存储 GPIO 配置参数。

设置参数(*3)

        使用输出或输入的函数控制GPIO口:

电灯,推挽输出,GPIO_Mode_Out_PP。RESET低,SET高

这里是低电平点亮(推挽下都可以,把led倒着插也可以闪)

代码

LED闪烁

GPIO_WriteBit()

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	//时钟开启GPIOA的
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	//初始化GPIO
	GPIO_InitTypeDef GPIO_InitStructure;//结构体存放参数
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//参数设置*3
	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);//设为低电平
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);//设为高电平
		Delay_ms(500);
        //法二
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);					
		Delay_ms(500);										
		GPIO_SetBits(GPIOA, GPIO_Pin_0);					
		Delay_ms(500);		
        //法三:0,1指定,强制类型转换为BitAction枚举
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);		
		Delay_ms(500);										
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);		
		Delay_ms(500);	
		
	}

}
LED流水灯

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

法一:GPIO_Pin_All选择所有端口(0-7)

法二:按位或操作 GPIO_Pin_0 |   GPIO_Pin_1 |  GPIO_Pin_2······(0-15)(可)

GPIO_Write()整体操作(!!!!)(一个一个来没必要,太复杂)

(低电平点亮)所以   ~0x0001  ,   按位取反(c语言不支持直接写二进制,所以转化为16进制)

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;//结构体存放参数
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//参数设置*3

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	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?Pin2                    低电平触发

int main(void)
{
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//开启GPIOB的时钟													
	GPIO_InitTypeDef GPIO_InitStructure;					
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				//GPIO引脚,赋值为第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);							
	}
}

连接方式

LED闪烁 

LED流水灯

 

蜂鸣器 

CTRL+F搜索 

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

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

相关文章

状压DP,abc359_d - Avoid K Palindrome

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 D - Avoid K Palindrome 二、解题报告 1、思路分析 数据量:N:1000,K:10 提示我们状态压缩 我们发现长度为K的字符串,我们可以用0表示A&#xff…

vue2项目如何引入element组件库以及如何使用element组件库

目录 一、创建项目二、进入项目1、先进入项目,![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a1ce9d928fdb4b5d85e6612f458a33db.png)2、路径栏输入cmd,然后回车3、输入code . ,然后回车 三、项目启动1、查看启动指令2、启动项目 …

VMwave安装Ubuntu20.04超详细图文教程(附VMwave17.5安装包)

VMwave安装 Ubuntu20.04 超详细图文教程 一、VMwave安装 官网下载 网盘下载 二、Ubuntu下载 三、Ubuntu20.04安装 四、安装VMwave tools 五、更改Ubuntu软件源 注:写教程的时候博主用的是VMware Workstation pro 17(VM17.5) 一、VMwave安装 以下我提供两…

常见中间件漏洞(一、Tomcat合集)

目录 一.Tomcat Tomcat介绍 1.1 CVE-2017-12615 影响范围 环境搭建 漏洞复现 1.2 后台弱口令部署war包 漏洞原理 影响版本 环境搭建 1.3 CVE-2020-1938 漏洞原理 影响版本 环境搭建 漏洞复现 一.Tomcat Tomcat介绍 tomcat是一个开源而且…

clion开发stm32f4系列(一)————移植rt-thread os系统

前言 本次使用的rt-thread的版本为5.0.2基于rt-thread sudio生成的源码进行拷贝和修改工程基于上次创建工程的项目进行修改。本次工程只是用了serial和pin组件,其他后面用到再进行添加 拷贝rt-thread源码库 通过CMakeLists来进行管理 顶级(rt-thread目录) cmake_minimum_req…

Tomcat常见漏洞复现

Tomcat介绍 tomcat是一个开源而且免费的jsp服务器,默认端口:8080,属于轻量级应用服务器。它可以实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。在历史上也披露出来了很多的漏洞,这里我们讲几个经典…

中国区域创新能力评价报告数据(2001-2023年)

《中国区城创新能力评价报告》是以中国区域创新体系建设为主题的综合性、连续性的年度研究报告。以区域创新体系理论为指导,利用大量的统计数据,综合、客观及动态地给出各省市创新能力的排名与分析。 一、数据介绍 数据名称:中国区域创新能力…

文件夹内鼠标右键没有git bash here?

文件夹内鼠标右键没有git bash here? 如何解决,只需要三步 1、window 搜索git 2、进入git bash 3、输入文件路径,(路径为反斜杠/) 例如: D:/Desktop/photo

设计模式的概念

设计模式主要分为三类:创建类的设计模式、结构型设计模式、行为型设计模式。 创建类的设计模式:简单工厂,工厂模式,抽象工厂,建造者,单例,原型 结构型设计模式:代理模式、享元模式 行…

国密SM4算法进行数据的加密、签名和验签、解密

文章目录 前言一、SM4算法介绍二、生成128位密钥工具类三、SM4Util工具类四、测试示例 前言 本文介绍了SM4算法的基本概念、安全性以及在Java中的应用,包括生成16字节密钥、加密、解密、签名和验签的过程,展示了如何在实际开发中使用SM4算法进行信息安全…

enq: HW - contention事件来啦

业务系统反应数据库慢,根据时间查看awr报告。 先看一眼事件名称 HW enqueue 用于序列化超出段高水位线的空间分配。如果同时向对象添加大量数据,则多个进程可能同时尝试在高水位线上方分配空间,从而导致争用。 既然是控制资源并发的enq&…

WiFi Analyzer:你的开源WIFI管家!【送源码】

无论是在家里还是在公司,手机连接 WiFi 时,总是会出现 WiFi 信号比较弱,网速变慢的情况。如何检测 WiFi 信号的情况呢?今天给大家推荐一个开源项目——WiFi Analyzer。 项目简介 WiFi Analyzer 是一个开源的 Android 应用程序&a…

母带混音插件-Musik Hack Master Plan 1.59 WiN-MAC,长期更新持续有效

Musik Hack Master Plan 1.59 WiN-MAC 一款专业的音频母带制作流程,只需简单的控制就能制作出适合发布的母带: 水晶般清晰的响度、丰富的模拟饱和度、相位一致的成像、物理磁带模拟,以及修复和监听混音的额外工具。 一。Musik Hack Master P…

在 PhpStorm 中为 .java 文件启用语法高亮,需要正确配置文件类型和关联语言。

点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 因为我同时使用java和php混编所以在一个项目中如果同时打开IntelliJ IDEA和PhpStorm不符合我完美主义的本性。 捣鼓了一下搞定了 1. 添加文件类型关联 将 .java 文件与 Java 语言支持关联: …

新160个crackme - 023-TraceMe

运行分析 需破解用户名和序列号 PE分析 C程序,32位,无壳 静态分析&动态调试 ida打开,由main函数向下分析,找到DialogFunc函数,并找到关键判断函数sub_401340 进入sub_401340函数,发现算法 发现byte_405…

xxl-job源码学习笔记

文章目录 一、简介二、下载源码三、模块介绍四、源码解析4.1、调度中心启动流程(xxl-job-admin)4.1.1、JobTriggerPoolHelper(触发任务执行的核心组件)4.1.2、JobRegistryHelper(维护和更新调度中心与执行器之间的注册…

常见中间件漏洞(四、Apache合集)

目录 四、Apache 4.1 CVE-2021-41773 漏洞简介 影响版本 环境搭建 漏洞复现 四、Apache 4.1 CVE-2021-41773 Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录<Directory/>Require all gra…

Spring Boot 依赖之 lombok的@Data注解

Spring Boot 依赖之 lombok的Data注解 编译之后的代码 Java源代码 引入lombok 一、创建 Spring Boot 项目 启动 IntelliJ IDEA&#xff0c;点击 File -> New -> Project...在新项目对话框中&#xff0c;选择 Spring Initializr&#xff0c;点击 Next配置 Spring Ini…

RF放大器(传输线+终止传输线+奥品电路中常见问题+调谐放大器)

2024-8-6&#xff0c;星期二&#xff0c;22:57&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。下班抽出点时间看看书&#xff0c;话不多说&#xff0c;学习开始啦。 今日继续学习模电自选教材的第六章&#xff0c;多级放大器、RF放大器和功率放大器。主要学习…

机械学习—零基础学习日志(高数23——无穷小运算)

零基础为了学人工智能&#xff0c;真的开始复习高数 这段时间&#xff0c;把张宇老师讲解考研的第一部分基本全部学习完毕了。 这里把第一部分的内容最后汇总一下。 无穷小运算——吸收律 这里展示一些无穷小的具体计算思路 无穷小运算——计算方法 泰勒展开的原则 夹逼准则…