STM32单片机的基本原理与应用(二)

单片机外部中断的基本原理

STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处。那么其中断是怎样实现的呢?其原理就是由GPIO口产生触发信号,通过NVIC中断控制器和EXTI外部中断控制器完成中断响应。使用外部中断可以对优先级进行分组,设置抢占优先级和响应优先级。
STM32F103 的中断控制器支持 19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为:

  • 线 0~15:对应外部 IO 口的输入中断。
  • 线 16:连接到PVD 输出。
  • 线 17:连接到RTC 闹钟事件。
  • 线 18:连接到USB 唤醒事件。

STM32 供 IO 口使用的中断线只有 16 个,但 STM32 的 IO 口却远远不止 16 个,那么是怎样对应的呢?其实是采用“一对多”的形式。GPIO 的管教 GPIOx.0至GPIOx.15(x=A、B、C、D、E、F、G)分别对应中断线 0~15。这样每个中断线对应了最多 7 个 IO 口,以线 0 为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到 1 个 IO 口上,这样就需要通过配置来决定对应的中断线配置到哪个 GPIO 上了。如下图所示,左边为GPIO,右边为对应的中断线。
在这里插入图片描述

实验案例

红外对管检测实验
红外对管传感器通过比较器输出高低电平,当有遮挡输出低电平,无遮挡输出高电平。

  • 实验准备:STM32核心板和红外对管
  • 原理图
    在这里插入图片描述

程序源码:
1、外部中断配置与中断服务函数

void EXTIX_Init(void)
{EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;INFRARED_Init();RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//使能复用功能时钟//GPIOA.0	  中断线以及中断初始化配置 下降沿触发 PA0  //红外对管对应PA0GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  // 下降沿EXTI_Init(&EXTI_InitStructure);		//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			//使能红外对管 所在的外部中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道NVIC_Init(&NVIC_InitStructure); 
}//外部中断0服务程序 
void EXTI0_IRQHandler(void)
{LED0=!LED0;	EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位  
}

2、主函数

int main(void)
{		delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);	 //串口初始化为115200LED_Init();		  		//初始化与LED连接的硬件接口INFRARED_Init();         	//初始化红外对管的硬件接口EXTIX_Init();		 	//外部中断初始化LED0=0;					//点亮LED0while(1){	    printf("OK\r\n");	delay_ms(1000);	  }
}

实验现象:
本实验通过外部中断0检测红外对管是否有被遮挡,当用手指遮挡红外对管传感器,触发中断,板载独立led状态翻转。

继电器开合原理

继电器的工作原理与线圈电流密不可分。当线圈中通过电流时,会产生磁场,从而使继电器的触点闭合或断开。继电器中的弹簧用于保持触点的闭合或断开状态。当线圈中无电流时,弹簧的弹力会使触点保持闭合;当线圈中有电流时,磁场产生的吸力会克服弹簧的弹力,使触点断开。

继电器控制实验
继电器模块电路由三极管控制并驱动继电器,其中三极管的基极与单片机的IO口相连RL-IO。继电器的控制引脚RL-IO与单片机引脚PD7相连接。

  • 实验需要:STM32核心板和继电器模块
  • 继电器模块电路原理图:
    在这里插入图片描述

程序源码:
首先,我们要对继电器进行初始化,并定义好各种继电器设置,如输出1时,关闭继电器。下面仅展示主函数。

int main(void){delay_init();	    	    //延时函数初始化	  RELAY_Init();         	//初始化蜂鸣器端口while(1){RELAY=0;		  delay_ms(1000);//延时1000msRELAY=1;  delay_ms(1000);//延时1000ms}}

实验现象:
编译并下载程序,本实验通过代码控制底板上的继电器周期性的打开关闭,可以听到继电器吸合的“哒哒”声。

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

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

相关文章

Node.js Cool 框架分页数据 如果在一个状态下获取多个状态的数据

1.需求 比如你想实现 订单状态列表的获取 有可能orderStatus12 的时候 想返回 orderStatus10 11 12 13 的时候 分页返回 2.解决 query.orderProgress[] 此时条件就变成了一个数组 //订单列表async getOrderListByprogress(query) {const { userId } this.ctx.clientInfo…

RabbitMQ问题总结

:::info 使用场景 异步发送(验证码、短信、邮件。。。)MySQL 和 Redis、ES 之间的数据同步分布式事务削峰填谷… ::: 如何保证消息不丢失 上图是消息正常发送的一个过程,那在哪个环节中消息容易丢失?在哪一个环节都可能丢失 生…

opencv#32 可分离滤波

滤波的可分离性 就是将一个线性滤波变成多个线性滤波,这里面具体所指的是变成x方向的线性滤波和y方向的线性滤波。无论先做x方向的滤波还是y方向滤波,两者的叠加结果是一致的,这个性质取决于滤波操作是并行的,也就是每一个图像在滤…

vue3+echarts绘制某省区县地图

vue3echarts绘制某省区县地图 工作中经常需要画各种各样的图,echarts是使用最多的工具,接近春节,想把之前画的echarts图做一个整合,方便同事和自己随时使用,因此用vue3专门写了个web项目,考虑之后不断完善…

基于SpringBoot实现策略模式提供系统接口扩展能力

相信我们对策略模式都有耳闻,但是可能不知道它在项目中具体能有什么作用,我们需要在什么场景下才能去尽可能得去使用策略模式。 这里我简单的列出一个我之前在公司做的一个需求:跟第三方oa系统对接接口,对方需要回调我们当前系统…

R12.2 EBS 修改 APPS 密码 详细步骤

目录 前言准备修改步骤1.关闭应用层2.FNDCPASS 修改密码3. 运行 autoconfig4.单独启动 webLogic 服务5.登录weblogic,更新apps密码6.启动应用层7.验证 结尾 前言 本文的目的是修改 apps 密码,主要参考官方文档 metalink 1674462.1,请注意本文…

代码随想录算法训练营Day|层序遍历,翻转二叉树,对称二叉树

层序遍历 层序遍历一个二叉树,就是从左往右一层一层的遍历二叉树,这种遍历方式需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而…

Task04:DDPG、TD3算法

本篇博客是本人参加Datawhale组队学习第四次任务的笔记 【教程地址】https://github.com/datawhalechina/joyrl-book 【强化学习库JoyRL】https://github.com/datawhalechina/joyrl/tree/main 【JoyRL开发周报】 https://datawhale.feishu.cn/docx/OM8fdsNl0o5omoxB5nXcyzsInGe…

Delphi 7 IdHTTP POST 中文乱码得解决

WEB后台使用UTF-8进行编码,由于D7默认是ansiString,直接提交到后台会使中文乱码。 解决方法: 1.先把AnsiString转WideString 2.通过System单元中的ansitoUTF8()函数进行转换之后再提交就可以了。 代码示例: procedure postDe…

华为三层交换机之基本操作

Telnet简介 Telnet是一个应用层协议,可以在Internet上或局域网上使用。它提供了基于文本的远程终端接口,允许用户在本地计算机上登录到远程计算机,然后像在本地计算机上一样使用远程计算机的资源。Telnet客户端和服务器之间的通信是通过Telnet协议进行的…

OpenAI 降低价格并修复拒绝工作的“懒惰”GPT-4,另外ChatGPT 新增了两个小功能

OpenAI降低了GPT-3.5 Turbo模型的API访问价格,输入和输出价格分别降低了50%和25%。这对于使用API进行文本密集型应用程序的用户来说是一个好消息。 OpenAI官网:OpenAI AIGC专区:aigc 教程专区:AI绘画,AI视频&#x…

Vite+Electron快速构建一个VUE3桌面应用(二)——动态模块热重载

一. 简介 在上一篇文章ViteElectron快速构建一个VUE3桌面应用中,我们了解了如何使用Vite和Electron来快速构建一个Vue3桌面应用。但是,之前构建的应用仅仅是一个简单的版本。在开发过程中,为了更好的开发体验,在开发electron的时…

博弈论(牛客练习赛)

思路:我们考虑小念赢 1、如果n>1并且p0,小念可以连续取两次,相当于小念有挂,可以从必败态转为必胜态,必赢。 2、如果n>1并且m>n-1,小念第一次取n-1个,小念必赢。 代码: …

【C语言】(1)初识C语言

什么是C语言 C语言是一种广泛应用的计算机编程语言,它具有强大的功能和灵活性,使其成为系统编程和底层开发的首选语言。C语言的设计简洁、高效,且不依赖于特定的硬件或系统,因此在各种计算平台上都能稳定运行。 C语言的特点 高…

C++ 之LeetCode刷题记录(十九)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 108. 将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你…

针对于vue element-plus组件的el-date-picker日期区间组件的日期格式问题以及如何进行区间判断

<template><el-date-picker v-model"value1" type"daterange" range-separator"To" start-placeholder"开始日期" end-placeholder"结束日期" :size"size" change"sarend" /> </templat…

速盾:海外网站CDN加速建站有哪些优势?

随着互联网的发展&#xff0c;海外网站的建设和访问需求也日益增加。而为了提高海外网站的访问速度和用户体验&#xff0c;CDN加速技术成为了一种必不可少的解决方案。本文将介绍海外网站CDN加速建站的优势&#xff0c;并回答一些相关问题。 一、提高网站访问速度 海外网站部署…

C#学习笔记_数组

数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合&#xff0c;通常认为数组是一个同一类型变量的集合。 声明数组 一、一维数组 一维数组声明语法如下&#xff1a; datatype[] arrayName; 其中&#xff0c;datatype为数据类型&#xff0c;array…

844.比较含退格的字符串(力扣LeetCode)

844.比较含退格的字符串 题目描述 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 示例 1&#xff1a;…

泽众云真机-机型集中化运维方案升级全面完成

2024年元月份&#xff0c;泽众云真机运维团队&#xff0c;经过几个月软硬件多轮安装调试&#xff0c;机型集中化运维方案升级全面完成。解决了云真机的机型集中化运维难题&#xff0c;方便了运营人员手机管理。 具体如下&#xff1a; 1、集中化运维&#xff0c;如服务器、PC、…