STM32:外部中断的使用
1、使用GPIOA1来作为外部中断源时,需要定义3个结构体,分别是:GPIO、外部中断、中断优先级控制相关
中断控制部分的结构体在stm32固件库的 中断相关的.h文件找到
2、GPIOA1既是作为输入,也作为外部中断源,需要打开GPIOA的时钟以及GPIO的复用时钟
对其使能
时钟相关函数可以在rcc.h时钟相关的h文件找到
3、 再设置GPIOA1为外部中断源:
4、 然后对中断优先级分组:
这里选择2组,只有一个中断源选哪个都无所谓 。
5、接着对第一步定义的三个结构体进行配置:
GPIO的模式看情况来配置,这里我需要GPIOA1来做振动传感器的输出端,不震动输出高电平,震动输出低电平,所以这里选择的是下拉输入,配置好之后再对各自的内容进行初始化就完成了外部中断的c文件相关的代码。
6、主函数部分的中断代码如下:
外部中断1处理函数在启动文件当中封装好了可以打开直接复制调用
每次执行该中断时会获取中断标志位,执行完成后标志位需要软件置位
外部中断c文件代码
#include "exti.h"
#include "stm32f10x.h"void exti_Init(void)
{GPIO_InitTypeDef shake_init; //定义GPIO结构体EXTI_InitTypeDef exte_init;//定义外部中断结构体NVIC_InitTypeDef nvic_init;//定义中断控制结构体(misc.h文件)//打开GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//GPIOA1即是GPIO输出端口也是外部中断源所以打开复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);//GPIOA1口设置为外部中断源//中断优先级分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置GPIOA1配置shake_init.GPIO_Mode = GPIO_Mode_IPD;//下拉输入shake_init.GPIO_Pin = GPIO_Pin_1;shake_init.GPIO_Speed = GPIO_Speed_10MHz;//GPIOA初始化GPIO_Init(GPIOA, &shake_init);//配置EXTI外部中断exte_init.EXTI_Line = EXTI_Line1;exte_init.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式exte_init.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿信号exte_init.EXTI_LineCmd = ENABLE;//使能中断EXTI_Init(&exte_init);//中断初始化//配置NVIC中断控制器nvic_init.NVIC_IRQChannel = EXTI1_IRQn;//用的是GPIO1所以用中断通道1nvic_init.NVIC_IRQChannelCmd = ENABLE ; nvic_init.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级nvic_init.NVIC_IRQChannelSubPriority = 1;//子优先级NVIC_Init(&nvic_init);//中断控制初始化}
main.c:
#include "led.h"
#include "stm32f10x.h"
#include "relay.h"
#include "exti.h"
#include "shake.h"
void delay(uint16_t time)
{uint16_t i= 0;while(time--){i=12000;while(i--);}}int main()
{LED_Init();Relay_Init();Shake_Init();exti_Init();
void EXTI1_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line1) != RESET){GPIO_ResetBits(GPIOA,GPIO_Pin_3);//闭合继电器delay(1000); GPIO_SetBits(GPIOA,GPIO_Pin_3);//打开继电器}EXTI_ClearFlag(EXTI_Line1);//清除中断标志位}
}
使用中断来代替while函数来判断是否震动点亮led的方式会减少数据的调用,提高单片机工作效率。
STM32:外部中断的使用相关推荐
- STM32外部中断与各通道对应关系
EXTI0_IRQn的值,其实就是EXTI0中断向量在中断向量表中的位置(STM32技术参考手册中断向量表position栏中的数值) 一:外部中断使用配置过程: (1)配置时钟信号 (2)引脚属性 ...
- STM32外部中断干扰解决方案
STM32 外部中断很容易受干扰误触发,无论上拉下拉设置都没有效果,最后采用软件判断解决该问题. 进入外部中断程序需同时判断引脚电平是否和上升触发和下降触发一致,这个判断很重要. void EXTI3 ...
- STM32外部中断总结
STM32外部中断总结 STM32的外部中断是我们在学习stm32的一个必要模块,外部中断的用途可以增加人机交互的体验,也可以增加程序的执行效率.下面将以一个小实验来记录外部中断的使用需要注意的事项 ...
- STM32——外部中断
目录 外部中断简述 什么是外部中断 传统单片机与新型单片机外部中断区别 STM32外部中断请求 STM32中断线与IO口的对应 STM32 中断服务函数 外部中断与中断服务函数的对应 中断服务函数列表 ...
- 采用STM32外部中断模式控制LED灯亮灭
文章目录 实验工具 一.STMCube配置项目 1.配置引脚 2.配置EXIT 3.配置SYS 4.配置GPIO 5.创建代码 二.使用KEil配置代码 1.打开生成的项目,找到stm32f1xx_i ...
- 【嵌入式STM32-05】STM32 外部中断 EXTI 基本原理|库函数程序代码|寄存器
STM32外部中断 1.中断基本原理 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行 中断 ...
- STM32外部中断与(NVIC)中断优先级管理
文章目录 1.中断介绍 1.中断的概念 2.中断的产生 3.中断处理的流程 2.STM32内嵌向量中断控制器NVIC 1.NVIC控制器的寄存器 2.STM32中断配置 3.STM32外部中断EXIT ...
- STM32外部中断与看门狗
STM32外部中断与看门狗 前面说过中断的概念了,但是没有细究,中断除了内部中断(比如运行错误),还能受到外部中断 文章目录 STM32外部中断与看门狗 一 外部中断描述 1.1 外部中断描述 1.2 ...
- stm32 外部中断学习
今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...
- stm32外部中断_STM32学习笔记 | 电源管理及低功耗设计要点
一款好的电子产品,都需要认真考虑电源管理的问题,电池供电的产品更应该注意低功耗的实现. STM32电源介绍 嵌入式开发直播课 - STM32 USART串口的应用 - 创客学院直播室www.make ...
最新文章
- 《梦醒黄金城》主创暨明星见面会举办 预计2019年完成拍摄
- 【推荐系统】KDD2021推荐系统论文集锦
- CentOS 6.9/7通过yum安装指定版本的MySQL
- java nio 强制关闭_Java NIO服务器:远程主机强迫关闭了一个现有的连接
- (day 39 - 动态规划) 剑指 Offer 47. 礼物的最大价值
- EasyAndroid基础集成组件库之:EasyPhoto (单张)图片选择库
- 2018中国旅游统计年鉴
- MSN机器人-头像显示
- plsql 导入导出数据
- intel D435i 双目相机 拍摄图片并保存 python调用示例
- Process finished with exit code -1073740791(0xC0000409) | Could not locate zlibwapi.dll.
- js逆向 空气质量检测平台
- 科普:手机电池的保护电路
- Tableau 不同产地电影数量与评分-案例讲解
- vue-cli创建uni-app项目
- 怎样才是理想的程序员
- 因为有了老狼,老虎,我们不在是兔子.
- 关于css 中的dl dt dd
- java零钱换整程序_透析递归应用-换零钱
- 锁定行列的html插件,如何实现行列的锁定