当前位置: 首页 > news >正文

嵌入式进阶——外部中断(EXTI)

🎬 秋野酱:《个人主页》
🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

    • STC8H中断外部中断
    • 外部中断编写
      • 配置外部中断
      • 调用中断触发函数
    • 外部中断测试
      • 测试外部中断0
      • 测试外部中断2、3或者4
    • PCB中断设计

STC8H中断外部中断

在这里插入图片描述

在数字电路中,信号的电平变化分为上升沿和下降沿。
上升沿指的是信号从低电平变为高电平的瞬间,下降沿指的是信号从高电平变为低电平的瞬间。
例如,当一个开关被按下时,电路中的信号从低电平变为高电平,此时发生了一个上升沿;当开关被松开时,信号从高电平变为低电平,此时发生了一个下降沿。在数字电路中,上升沿和下降沿往往会被用作时序控制和数据传输等方面的参考信号。
在这里插入图片描述

外部中断编写

  1. 引入外部中断库函数
    a. Exti.hExti.cExti_Isr.c
    b. NVIC.c NVIC.h

配置外部中断

#include "Exti.h"
#include "NVIC.h"/******************** INT配置 ********************/
void	Exti_config(void)
{EXTI_InitTypeDef	Exti_InitStructure;							//结构定义Exti_InitStructure.EXTI_Mode      = EXT_MODE_RiseFall;//中断模式,   EXT_MODE_RiseFall,EXT_MODE_FallExt_Inilize(EXT_INT0,&Exti_InitStructure);				//初始化NVIC_INT0_Init(ENABLE,Priority_0);		//中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}
void ext_int0_call(void) {// 当中断触发时的实现逻辑
}

调用中断触发函数

extern void ext_int0_call();
//========================================================================
// 函数: INT0_ISR_Handler
// 描述: INT0中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2020-09-23
//========================================================================
void INT0_ISR_Handler (void) interrupt INT0_VECTOR		//进中断时已经清除标志
{ext_int0_call();
}

外部中断测试

测试外部中断0

测试上升沿和下降沿中断
初始化EXT_INT0,并将P32设置为准双向或HighZ高阻输入模式(不设置默认也是HighZ)。
按下核心板上的P32按钮,编写中断函数,观察上升沿和下降沿对应日志

测试外部中断2、3或者4

案例设置:
● 准备一个引脚(例如P53暂且叫做A引脚),初始化时为输出模式,并且为低电
● 初始化中断引脚P3.6或者P3.7(暂且叫做B引脚),配置为下降沿触发,并且实现中断事件函数
● 通过杜邦线将A引脚和B引脚连接
● 准备串口,通过串口工具给串口发送指令
● 串口接收到特定指令时,将A引脚拉高或拉低
● 在中断事件函数中进行打印,观察打印结果
测试上升沿案例会发现无效,这个由芯片内部决定的。

PCB中断设计

要了解的一些情况:

  1. 芯片引脚支持触发类型,是上升沿触发还是下降沿触发。
  2. 外部中断发送者是否是可控的,是不是能控制高低电平。
    a. 能控制最好,芯片方的引脚只需要关注是不是外部中断引脚。
    b. 不能控制,要了解对方的触发方式,寻找芯片对应的触发类型引脚。
    c. 不能控制,芯片的外部中断引脚没有对应的触发方式了,电路设计时,做上拉或者下拉电阻。
http://www.lryc.cn/news/355683.html

相关文章:

  • flinkcdc 3.0 源码学习之客户端flink-cdc-cli模块
  • 香橙派 AIpro开发体验:使用YOLOV8对USB摄像头画面进行目标检测
  • Python中正则表达式详解
  • vue使用EventBus进行跨组件通信
  • boot项目中定时任务quartz
  • 使用阿里云OSS实现视频上传功能
  • LOTO示波器软件新增导览功能
  • 【StructueEngineering】SYMBOL SCHEDULE
  • 简化跨网文件传输摆渡过程,降低IT人员工作量
  • 关于python中屏蔽输出
  • 螺旋矩阵(算法题)
  • ffmpeg-webrtc(metartc)给ffmpeg添加webrtc协议
  • C语言知识大纲
  • 【必会面试题】synchronized锁升级的过程
  • 设计模式——工厂三兄弟之简单工厂
  • 如何使用ChatGPT撰写短视频爆款文案
  • 申办风景园林设计乙级资质如何整理技术人员的专业培训证明
  • 类别型特征
  • java医院管理系统源码(springboot+vue+mysql)
  • vue2 面试题
  • 【JavaEE精炼宝库】多线程(3)线程安全 | synchronized
  • el-table-column两种方法处理特殊字段,插槽和函数
  • huggingface笔记: accelerate estimate-memory 命令
  • 李飞飞亲自撰文:大模型不存在主观感觉能力,多少亿参数都不行
  • 超级好用的C++实用库之套接字
  • C++ | Leetcode C++题解之第108题将有序数组转换为二叉搜索树
  • 5月27日,每日信息差
  • echart扩展插件词云echarts-wordcloud
  • 解决无法直接抓取链接地址
  • java面对对象编程-多态