STM32 - LED灯 蜂鸣器

news2024/11/19 15:37:08
  •  🚩 WRITE IN FRONT 🚩       

  • 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
  • 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量8w+、个人社区人数累计4w+、全网访问量100w+ 🏅
  • 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
  • 📑 创作时间:2022 年 11 月 2 日 📅
  • 📝 个人主页:謓泽的博客 📃
  • 📣 专栏系列:【51单片机】系列_謓泽的博客📃
  • 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
  • 🎁 点赞👍+ 收藏⭐️+ 留言📝​
  • ✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩 

₀前言

📝说明↔LED灯和蜂鸣器就不再介绍了,具体可以去51单片机系列了解👋

链接如下⇲【51单片机】系列_謓泽的博客-CSDN博客

⒈操作GPIO步骤 

操作STM32当中的GPIO一共有三步骤如下👇

使用RCC开启GPIO的时钟 [RCC-即复位与时钟控制,主要是通过寄存器配置时钟源]

注⇢时钟相当于单片机的心脏,开启后才能实现相应的功能。

使用GPIO_Init函数初始化GPIO口。

使用输出或者输入函数控制GPIO口。

在这里一共涉及了RCC和GPIO两个外设,那么就让我们来看看这两个函数有哪些库函数。

₁.₁函数 

下面介绍下 RCC 的库函数以及 GPIO 的库函数。

这个代码头文件是在stm32f10x_rcc.h头文件当中的。

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);
1.RCC AHC外设时钟控制
2.RCC APB2外设时钟控制
3.RCC APB1外设时钟控制

🌴说明↔在上述代码中是我们最常用的三个函数的头文件,可以跳转到.c文件看看具体是什么意思。

这个代码头文件是在stm32f10x_gpio.h头文件当中的。我们目前了解以下GPIO头文件即可。

//note:调用这个函数,所指定的GPIO外设就会被复位.
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
//note:调用这个函数,可以复位AFIO的外设.
void GPIO_AFIODeInit(void);
//note:调用这个函数,用结构体当中的参数也就是成员变量来初始化GPIO口
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
//note:调用这个函数,可以把结构体变量赋值一个默认值
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);

//Read function
1.读取输入数据寄存器某一个端口输入值.
2.读取输入整个数据寄存器的.
3.读取输出数据寄存器的某一位,所以原则上它并不是用来读取端口的输入数据.
4.读取输出整个数据寄存器的.
说明:读取输入是可以高低电平变化的(Io电平)而读取输出是代表输出一个指定的电平.
注:一般读取输入都是外在控制比较多,像按键和传感器等.

//写入函数
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);

//Write function
1.指定端口设置成为高电平.
2.指定端口设置成为低电平.
3.前两个也是指定端口的,第三个参数:根据值来设置指定的端口电平.
4.第一个参数选择外设,第二个参数可以同时对16个端口进行写入操作.

这里面重要的函数是GPIO初始化以及8个读写函数。

这上面的读写函数就是可以实现读写GPIO口的功能,以上代码的源文件.c相比五一C语言难度是难了许多设计到C语言很多比较难的知识点,如果你不会这些知识点或者是还是不了解,那么我推荐你还是在回去学习一下C语言,因为这些函数尽管是可以在库函数直接拿来就可以用的。但是这样你对于这种理解层面对于32的代码库上你只是一个很浅的水平,所以说C语言很重要。一般我认为学到这种你起码还是要学习下数据结构这样对于你理解层面帮助会很大,前提是你的C语言要过关尤其是关于指针各个方面的,不然你学数据结构你也是对于它来说非常懵的一个状态。

⒉LED点灯

正式开始成为点灯大师(@^0^) 注→这里我们把引脚阴极是在STM32引脚当中的A0引脚当中,阳极放在Vcc上。此时我们给A0引脚低电平LED灯就会被点亮。

#include "stm32f10x.h"                  
int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	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);
	
	GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}

₂.₁LED闪烁

说明-写代码之前介绍下如下代码👇

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

第一个参数和第二个参数自然不需要介绍了,介绍下第三个参数 BitVal 是什么意思吧,其实很容易就是控制此引脚高低电平。你给第三个参数是Bit_SET那么此引脚为高电平,如果我们参数是Bit_RESET此引脚为低电平。

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

/**
  * @brief  微秒级延时
  * @param  xus 延时时长,范围:0~233015
  * @retval 无
  */
void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}

/**
  * @brief  毫秒级延时
  * @param  xms 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 
/**
  * @brief  秒级延时
  * @param  xs 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	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);
		
        //如果第三个参数给0 or1 在这里需要进行强制转换成BitAction枚举类型,不然会warning.
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);
		Delay_ms(500);
	}
}

₂.₂LED流水灯

示例代码如下👇

#include "stm32f10x.h"             
#include "Delay.h"

#define BINARY 1 //根据0||1选择 

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;      //注:GPIO_Pin_All:相当于选中了所有位
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	while (1)
	{
#if BINARY//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);
#else//0
		int i = 0;
		for(i=0;i<8;i++)
		{
			GPIO_Write(GPIOA, ~(0x0001<<i));
			Delay_ms(100);
		}
#endif 		
	}
}

说明→当然你还可以使用数组的方式来获取,这里就不再演示了。

说明→这个是上述代码的接线图。 

⒊蜂鸣器

接线图如下👇

注意→在这里A15、B3、B4三个IO口别选,因为这三个口默认的是调试端口,如果要用做普通端口还需要进行配置。

代码示例如下👇

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

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	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(1000);
	}
}

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

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

相关文章

mysql学习——SQL中的DQL和DCL

SQL中的DQL和DCL DQL基本查询条件查询聚合函数分组查询排序查询分页查询 DCL管理用户权限控制 学习黑马MySQL课程&#xff0c;记录笔记&#xff0c;用于复习。 DQL DQL英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记…

为什么能通过文本分析情感?

通过文本分析情感&#xff0c;通常称为情感分析&#xff08;Sentiment Analysis&#xff09;或意见挖掘&#xff08;Opinion Mining&#xff09;&#xff0c;是自然语言处理&#xff08;NLP&#xff09;的一个分支。这项技术能够识别和提取文本中的主观信息&#xff08;对呀&am…

# 消息中间件 RocketMQ 高级功能和源码分析(八)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;八&#xff09; 一、消息中间件 RocketMQ 源码分析&#xff1a;实时更新消息消费队列与索引文件流程说明 1、实时更新消息消费队列与索引文件 消息消费队文件、消息属性索引文件都是基于 CommitLog 文件构建的&#xff0…

pdf转word在线转换怎么操作?学会这3个,轻松完成转换

pdf转word在线转换怎么操作&#xff1f;PDF转Word在线转换的重要性不言而喻&#xff0c;特别是在需要编辑或修改PDF文件内容时。它极大地简化了繁琐的复制粘贴流程&#xff0c;允许我们直接在Word文档中修改文字、调整格式&#xff0c;大大提高了工作效率。无论是学术研究、商务…

Modsecurity安装+Nginx+腾讯云CentOS+XSS-Labs靶场+WAF规则

君衍. 一、项目环境介绍二、ModSecurity介绍1、Modsecurity基本概述2、Modsecurity工作原理3、Modsecurity功能特点4、Modsecurity优点5、Modsecurity缺点 三、Nginx介绍及配置文件1、Nginx基本概述2、Nginx应用场景3、正向代理4、反向代理5、负载均衡6、动静分离7、主页面路径…

【LinuxC语言】深入理解IP地址与端口号

文章目录 前言端口号IP地址IP地址的分类主机地址与网络地址多播是什么子网掩码特殊的地址与私有的地址总结前言 在计算机网络中,IP 地址和端口号是两个非常重要的概念。IP 地址用于标识网络上的设备,而端口号则用于在同一设备上区分不同的服务或应用。在 Linux C 语言编程中…

一文学会用RKE部署高可用Kubernetes集群

k8s架构图 RKE简介 RKE全称Rancher Kubernetes Engine,是一个快速的,多功能的 Kubernetes 安装工具。通过RKE,我们可以快速的安装一个高可用K8S集群。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows。 K8S原生安装需要的先决条件较多,比如说需要预安装kubeadm,kub…

GPT-5大幅推迟?OpenAI CTO称将在2025年底到2026年初推出

GPT-5大幅推迟&#xff1f;OpenAI CTO称将在2025年底到2026年初推出 OpenAI CTO同时透露&#xff0c;GPT-5性能将有巨大飞跃&#xff0c;在某些特定任务中达到“博士水平”智能&#xff0c;此前市场曾预测GPT-5可能在2023年底或2024年夏季发布。 一再跳票的GPT-5可能大幅推迟…

基于matlab的SVR回归预测

1 原理 SVR&#xff08;Support Vector Regression&#xff09;回归预测原理&#xff0c;基于支持向量机&#xff08;SVM&#xff09;的回归分支&#xff0c;其核心思想是通过寻找一个最优的超平面来进行回归预测&#xff0c;并处理非线性回归问题。以下是SVR回归预测原理的系统…

腾讯 MOFA-Video: 可控制图转视频

腾讯 MOFA-Video: 可控制图转视频 MOFA-Video 它支持运动轨迹、人脸关键点并支持将其混合控制图像转换为视频。 混合控制: 结合图像、控制信号和关键点生成动画。 运动画笔: 结合图像、轨迹和画笔生成动画。 控制比例: 调整动画的控制比例&#xff0c;从纯 SVD 到完全控制。 通…

实验七:了解可编辑网格与多边形实战

如果文章有写的不准确或需要改进的地方&#xff0c;还请各位大佬不吝赐教&#x1f49e;&#x1f49e;&#x1f49e;。朱七在此先感谢大家了。&#x1f618;&#x1f618;&#x1f618; &#x1f3e0;个人主页&#xff1a;语雀个人知识库 &#x1f9d1;个人简介&#xff1a;大家…

情感搞笑聊天记录视频:AI自动化生成技术,操作简单,教程+软件

在数字化时代&#xff0c;内容创作已成为吸引观众、传递信息的重要手段。随着人工智能技术的飞速发展&#xff0c;AI自动生成视频为创作者提供了新的工具和可能性。本文将介绍如何利用AI技术&#xff0c;通过情感搞笑聊天记录视频&#xff0c;在视频号上实现内容的自动化生成&a…

什么样的落地台灯比较好?五款宝藏可靠护眼大路灯推荐

现代家庭中&#xff0c;落地台灯也逐渐的代替传统台灯&#xff0c;成为许多孩子在读写时的照明神器&#xff0c;它已经被许多家长认可&#xff0c;宽广的光线光线清晰&#xff0c;视觉上舒适了不少。然而&#xff0c;目前市场上有许多品牌未经过充分的技术、材质和工艺研究&…

中国车牌检测数据集VOC+YOLO格式2001张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2001 标注数量(xml文件个数)&#xff1a;2001 标注数量(txt文件个数)&#xff1a;2001 标注…

“论云原生架构及其应用”写作框架,系统架构设计师

论文真题 近年来&#xff0c;随着数字化转型不断深入&#xff0c;科技创新与业务发展不断融合&#xff0c;各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下&#xff0c;以容器和微服务架构为代表的云原生技术作为云计算服务的新…

【耐水好】强耐水UV胶水是怎样的?

【耐水好】强耐水UV胶水是怎样的&#xff1f; 强耐水UV胶水是一种特殊的胶水&#xff0c;其设计重点在于其出色的耐水性能。以下是关于强耐水UV胶水的特点&#xff1a; 优异的耐水性能&#xff1a;这种胶水能在水环境下保持稳定的粘接强度&#xff0c;不易被水分解或削弱。因…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP4241(SPI接口)的数字电位器Proteus仿真

一、仿真原理图: 二、仿真效果: 三、STM32CubeMX配置: 1)、SPI接口配置: 2)、时钟配置 四、软件代码部分: 1)、初始化部分: void Task0_Init(void) { lcd1602_Init(); LCD1602_write_string(0,0,"POT0 value:"); LCD1602_write_string(1,0,"POT…

Langchain实战:构建高效的知识问答系统

引言 知识问答系统&#xff08;KQA&#xff09;是自然语言处理领域的核心技术之一&#xff0c;它能够帮助用户从大量数据中快速准确地检索到所需信息。知识问答系统成为了帮助个人和企业快速获取、筛选和处理信息的重要工具。它们在很多领域都发挥着重要作用&#xff0c;例如在…

“人工智能+”带来新变化

以生成式人工智能&#xff08;AIGC&#xff09;为代表的新一代人工智能技术创新加速演进&#xff0c;相关商业化应用成果也不断涌现&#xff0c;行业应用范围不断拓展&#xff0c;深度赋能实体经济&#xff0c;为行业提质增效与实现减排提供助力。 自主航运初创公司OrcaAI于6月…

AI 大模型企业应用实战(06)-初识LangChain

LLM大模型与AI应用的粘合剂。 1 langchain是什么以及发展过程 LangChain是一个开源框架&#xff0c;旨在简化使用大型语言模型构建端到端应用程序的过程&#xff0c;也是ReAct(reasonact)论文的落地实现。 2022年10月25日开源 54K star 种子轮一周1000万美金&#xff0c;A轮2…