stm32_标准库_中断_按键点灯|蜂鸣器

news2024/11/24 13:03:22

配置流程

在这里插入图片描述
需要对AFIO、EXTI、NVIC、GPIOB进行配置形成通路将中断连接至CPU

APB2总线连接的寄存器

在这里插入图片描述

LED灯代码

#include "stm32f10x.h"    // Device header
#include "Delay.h"
 
 
 
GPIO_InitTypeDef GIPO_InitStruct;//结构体配置GPIO
EXTI_InitTypeDef EXTI_Int_Struct;//结构体Exti
NVIC_InitTypeDef NVIC_IniyStruct;

GPIO_InitTypeDef GPIO_InitStructure;//定义变量GPIOA结构体

void CountSensor_Init(void){//配置中断
	
/*开启APB2的时钟*/
	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启APB2的外设,GPIOB是APB2的外设
	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启AFIO的外设,AFIO是APB2的外设

	
//EXTI和NVIC外设默认打开不必打开
	

/*配置GPIO*/
GIPO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//上拉输入模式input、out
GIPO_InitStruct.GPIO_Pin = GPIO_Pin_14;//开启14号引脚
GIPO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GIPO_InitStruct);
	
/*AFIO外外部引脚选择*/
	
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);//PB14连接
EXTI_Int_Struct.EXTI_Line = EXTI_Line14;//接14
EXTI_Int_Struct.EXTI_LineCmd = ENABLE;//开启
EXTI_Int_Struct.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
EXTI_Int_Struct.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发

EXTI_Init(&EXTI_Int_Struct);//写入


/*将EXTI的14号线路配置为中断模式,下降沿触发,连接在PB14端口*/


//配置Nvic

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置响应等级


NVIC_IniyStruct.NVIC_IRQChannel = EXTI15_10_IRQn;//找到对应通道
NVIC_IniyStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_IniyStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_IniyStruct.NVIC_IRQChannelSubPriority = 1;
//抢占优先级和响应优先级都设置为1

NVIC_Init(&NVIC_IniyStruct);
}

//写中断函数



 
 

void GPIOA_INIT(void){//初始化GPIOA代码
	GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;//推挽输出
	GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_0;//零号引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出50HZ
	GPIO_Init(GPIOA, &GPIO_InitStructure);//写入
	GPIO_SetBits(GPIOA, GPIO_Pin_0);
}


void LED_LIGHT(void){//点亮灯代码
	GPIO_ResetBits(GPIOA, GPIO_Pin_0);//指定端口设置为低电平
}


int count = 0;

void EXTI15_10_IRQHandler(void){//名字得写对(10~15)
	
     if(EXTI_GetITStatus(EXTI_Line14) == SET){//查看是否是对应的中断函数
			 
			  EXTI_ClearITPendingBit(EXTI_Line14);//清除
			  
		    	  
			    
					GPIO_ResetBits(GPIOA, GPIO_Pin_0);
					Delay_ms(150);
					GPIO_SetBits(GPIOA,GPIO_Pin_0);
				
		 }
	
}


int main(void){
  
	CountSensor_Init();//初始化中断
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟
	GPIOA_INIT();//初始化GPIOA代码
	
	while(1){
		
	}
	
}

LED灯效果

在这里插入图片描述
在这里插入图片描述
蜂鸣器代码

#include "stm32f10x.h"    // Device header
#include "Delay.h"
 
 
 
GPIO_InitTypeDef GIPO_InitStruct;//结构体配置GPIO
EXTI_InitTypeDef EXTI_Int_Struct;//结构体Exti
NVIC_InitTypeDef NVIC_IniyStruct;

GPIO_InitTypeDef GPIO_InitStructure;//定义变量GPIOA结构体

void CountSensor_Init(void){//配置中断
	
/*开启APB2的时钟*/
	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启APB2的外设,GPIOB是APB2的外设
	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启AFIO的外设,AFIO是APB2的外设

	
//EXTI和NVIC外设默认打开不必打开
	

/*配置GPIO*/
GIPO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//上拉输入模式input、out
GIPO_InitStruct.GPIO_Pin = GPIO_Pin_14;//开启14号引脚
GIPO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GIPO_InitStruct);
	
/*AFIO外外部引脚选择*/
	
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);//PB14连接
EXTI_Int_Struct.EXTI_Line = EXTI_Line14;//接14
EXTI_Int_Struct.EXTI_LineCmd = ENABLE;//开启
EXTI_Int_Struct.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
EXTI_Int_Struct.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发

EXTI_Init(&EXTI_Int_Struct);//写入


/*将EXTI的14号线路配置为中断模式,下降沿触发,连接在PB14端口*/


//配置Nvic

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置响应等级


NVIC_IniyStruct.NVIC_IRQChannel = EXTI15_10_IRQn;//找到对应通道
NVIC_IniyStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_IniyStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_IniyStruct.NVIC_IRQChannelSubPriority = 1;
//抢占优先级和响应优先级都设置为1

NVIC_Init(&NVIC_IniyStruct);
}

//写中断函数



 
 

void GPIOA_INIT(void){//初始化GPIOA代码
	GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;//推挽输出
	GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_0;//零号引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出50HZ
	GPIO_Init(GPIOA, &GPIO_InitStructure);//写入
	//GPIO_SetBits(GPIOA, GPIO_Pin_0);
}


void LED_LIGHT(void){//点亮灯代码
	GPIO_ResetBits(GPIOA, GPIO_Pin_0);//指定端口设置为低电平
}


int count = 0;

void EXTI15_10_IRQHandler(void){//名字得写对(10~15)
	
     if(EXTI_GetITStatus(EXTI_Line14) == SET){//查看是否是对应的中断函数
			 
			  EXTI_ClearITPendingBit(EXTI_Line14);//清除
			  
		    	  
			    GPIO_SetBits(GPIOA,GPIO_Pin_0);
			    Delay_ms(150);
					GPIO_ResetBits(GPIOA, GPIO_Pin_0);
					 
				
		 }
	
}


int main(void){
  
	CountSensor_Init();//初始化中断
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟
	GPIOA_INIT();//初始化GPIOA代码
	
	while(1){
		
	}
	
}

效果
在这里插入图片描述

在这里插入图片描述
注:GND接负极、VCC正级、I/O接引脚、正电平触发、设置初始电平为0、按下按键电平转1

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

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

相关文章

海普纯化产品-多肽固相合成载体

#海普纯化产品-多肽固相合成载体 多肽固相合成法被广泛应用于多肽和蛋白质的研究领域,特别是短多肽的合成,随着全新化学结构的新药开发难度加大,投入费用逐年增高,多肽类药物的开发逐渐成为医药领域的新热点。 多肽类药物合成技术…

【Redis】专栏合集,从入门到高级业务场景实战

作者简介 目录 1.概述 2.下载安装 3.基础操作 4.集群 5.实战场景 1.概述 诸如数mysql、Oracle之类的关系型数据库或者NTFS、HDFS之类的文件存储系统,其本质上数据都是存在磁盘上的。这是现代计算机体系架构的架构所决定的,要持久化存储的数据都会落…

一文带你实现从PDF到Word文件的相互转换

一文带你实现从PDF到Word文件的相互转换 01. 前期准备 模块安装 pip install pdf2docx or使用国内镜像源进行安装(清华的镜像源) pip install pdf2docx -i https://pypi.tuna.tsinghua.edu.cn/simple 02. 模块介绍 pdf2docx是一个Python模块&#xff0…

SpringBoot源码解析: 从手写一个简易版SpringBoot开始

IDE:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 文章目录 真正的SpringBoot手写一个简易版的springboot一. 准备1.1 准备自定义的springboot模块1.2 准备用户模块User 二. 运行测试2.1 第一次运…

如何快速上传批量剪辑的素材?附素材水印、字幕去除教程

想要快速上传网络素材,大家可以使用超级编导批量剪辑软件。 首先进入超级编导官网,免费下载超级编导超级编导软件,可以在官网中添加产品顾问,获取试用账号,登录即可开始使用。 超级编导支持批量上传URL链接到后台&…

Manifest merger failed

编译报错:Manifest merger failed with multiple errors 定位编译错误:java.lang.RuntimeException: Manifest merger failed with multiple errors 近日,项目中需要引入一个module。在成功导入后,添加依赖到主模块上&#xff0c…

【RocketMQ】(六)顺序消息实现原理

全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用…

955. 删列造序 II;1838. 最高频元素的频数;1392. 最长快乐前缀

955. 删列造序 II 核心思想:我们可以按照一行一行排列strs,删除索引序列就代表删除某一列,那么我们如何判断一列是否应该删除呢,我们可以从反方向思考,应该保留那些列呢?从第一列开始,如果它不…

WebGIS面试题(浙江中海达)

1、Cesium中有几种拾取坐标的方式,分别介绍 Cesium是一个用于创建3D地球和地理空间应用的JavaScript库。在Cesium中,你可以使用不同的方式来拾取坐标,以便与地球或地图上的对象进行交互。以下是Cesium中几种常见的拾取坐标的方式&#xff1a…

jdk21(最新版) download 配置(linux window mac)

download 直达链接 jdk21,17 # wget https://download.oracle.com/java/20/latest/jdk-21_linux-x64_bin.deb # 选择你需要的包类似格式替换包的名称就可以实现终端下载jdk下载登录/oracle账号 下载jdk有可能存在要求登录帐号的情况 # 好心人的帐号 账号: 599…

C语言内存函数的使用、剖析及模拟实现

目录 一、内存拷贝函数——memcpy 1.函数声明: 注意: 2.函数使用用例: 3.memcpy函数的模拟实现: 二、内存拷贝函数2——memmove 1.函数声明: 2.memmove函数的模拟实现 三、内存比较函数——memcmp 1.函数声明…

01_docker镜像管理:80分钟一口气学完docker+k8s!带你掌握docker+k8s所有核心知识点,全程干货,无废话!

docker镜像的实际使用学习 开发过程中,需要安装很多三方工具,比如etcd、kafka、mysql、nginx等等 1、下载安装Docker工具。 2、获取该软件的Docker镜像(基本上,都能搜索到核实的镜像),下载镜像nginx镜像…

浏览器基本原理

1、浏览器内部组成 我们看到浏览器主要包括: 1个浏览器主进程: 主要负责界面显示,用户交互,子进程管理多个渲染进程:一般浏览器会为每个Tab标签窗口创建一个渲染进程,主要负责将html,css&#…

经典网络(一) AlexNet逐层解析 | 代码、可视化、参数查看!

文章目录 1 回顾2 AlexNet的重要性3 AlexNet解析3.1 结构3.1.1 CONV13.1.2 Max Pool13.1.3 NORM13.1.4 CONV23.1.5 Max Pool23.1.6 CONV3 CONV43.1.7 CONV53.1.8 Max Pool33.1.9 FC1 FC2 FC3 3.2 AlexNet使用到的技巧3.3 可视化3.4 代码实现模拟3.4.1 查看每一层输入输出3.4.2 …

UE 虚幻引擎 利用LOD,Nanite技术优化场景性能

目录 0 引言1 LOD1.1 LOD定义1.2 UE5中的LOD技术1.3 HLOD(Hierarchical Level of Detail) 2 Nanite2.1 UE5的Nanite技术2.2 Nanite介绍2.2.1 Nanite的优势2.2.2 Nanite网格体与传统静态网格体的不同2.2.3 Nanite支持的类型2.2.4 在地形中使用Nanite 0 引…

KT142C语音芯片flash型用户如何更新固件的说明_V2

目录 一、简介 2.1 让芯片进入PC模式 2.2 双击提供的exe程序即可 一、简介 正常的情况下,用户肯定是不需要更新固件的,因为芯片出厂默认就烧录了对应的程序固件,但是有客户可能需要小修小改,或者订制一下某些功能&#xff0c…

寻找环形链表的入环点

之前我们在判断一个链表是否为环, 是运用快慢指针的方法,且只能是慢指针走一步,快指针两步; 那么如何求带环链表的入环点的 思路一:数学方法(找出带环链表各个特点量的关系) 代码:…

Linux设备驱动之Camera驱动

Linux设备驱动之Camera驱动 Camera,相机,平常手机使用较多,但是手机的相机怎么进行拍照的,硬件和软件,都是如何配合拍摄到图像的,下面大家一起来了解一下。 基础知识 在介绍具体Camera框架前&#xff0c…

图像复原与重建,解决噪声的几种空间域复原方法(数字图像处理概念 P4)

文章目录 图像复原模型噪声模型只存在噪声的空间域复原 图像复原模型 噪声模型 只存在噪声的空间域复原

字节一面:你能手撕节流防抖吗?

前言 最近博主在字节面试中遇到这样一个面试题,这个问题也是前端面试的高频问题,节流防抖是前端性能优化一个很重要的手段,所以作为一个前端工程师必须要深入掌握这个知识点,博主在这给大家细细道来。 🚀 作者简介&…