EXTI

  • EXTI简介
  • EXTI功能框图
  • KEY_UP按键触发中断
  • 程序

EXTI简介

EXTI:External interrupt/event controller 外部 中断/时间 控制器

EXTI功能框图

  1. 选择输入线
  2. 配置上升沿/下降沿触发选择寄存器
  3. 配置软件中断事件寄存器
  4. 配置中断屏蔽寄存器
  5. 配置NVIC中断控制器

输入线总共有19条(非互联型)

通过配置外部中断配置寄存器(AFIO_EXTICR1)来选择线路
PA0:EXTI0:0000

把KEY_UP配置为下拉输入;
如果没有按下,KEY_UP端(PA0)一直是低电平;
如果按下,PA0变为高电平;
配置为上升沿触发。

TR0:1 允许输入线0上的上升沿触发(中断和事件)。

软件中断事件寄存器



MR0:1 开放来自线0上的中断请求

KEY_UP按键触发中断

stm32f10x_exti.h中的初始化结构体以及初始化结构体里面的成员可以选择的值,还有初始化函数。

typedef struct
{uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.This parameter can be any combination of @ref EXTI_Lines  EXTI_Linex(x:0~15)选择输入线用于产生 中断/事件 线EXTI_Linex(x:0~15)*/EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.This parameter can be a value of @ref EXTIMode_TypeDef选择中断或者事件EXTI模式(中断/事件) */EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.This parameter can be a value of @ref EXTIMode_TypeDef 确定输入线的触发模式触发(上/下/上下)*/FunctionalState EXTI_LineCmd;     /*!< Specifies the new state of the selected EXTI lines.This parameter can be set either to ENABLE or DISABLE 确定选的输入线是否使能这个是配置中断/事件屏蔽寄存器的使能或者失能(IMR/EMR)ENABLE or DISABLE*/
}EXTI_InitTypeDef;typedef enum
{EXTI_Mode_Interrupt = 0x00,EXTI_Mode_Event = 0x04
}EXTIMode_TypeDef;typedef enum
{EXTI_Trigger_Rising = 0x08,EXTI_Trigger_Falling = 0x0C,  EXTI_Trigger_Rising_Falling = 0x10
}EXTITrigger_TypeDef;void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
stm32f10x_gpio.h中的选择GPIO端口作为输入线的函数
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

程序

1-初始化要连接到EXTI的GPIO
2-初始化EXTI用于产生中断/事件
3-初始化NVIC,用于处理中断
4-编写中断服务函数
5-main函数

exti.h
#ifndef __EXTI_H
#define __EXTI_H
#include "stm32f10x.h"#define KEY_UP_INT_GPIO_PIN   GPIO_Pin_0
#define KEY_UP_INT_GPIO_PORT  GPIOA
#define KEY_UP_INT_GPIO_CLK   RCC_APB2Periph_GPIOAvoid EXTI_Key_Config(void);
#endif
exti.c
#include "exti.h"void EXIT_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStruct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);
}void EXTI_Key_Config(void)
{//定义变量GPIO_InitTypeDef GPIO_InitStruct;EXTI_InitTypeDef EXTI_InitStruct;//配置中断优先级EXIT_NVIC_Config();//初始化GPIORCC_APB2PeriphClockCmd(KEY_UP_INT_GPIO_CLK,ENABLE);GPIO_InitStruct.GPIO_Pin=KEY_UP_INT_GPIO_PIN;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;GPIO_Init(KEY_UP_INT_GPIO_PORT,&GPIO_InitStruct);//初始化EXTIRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//选择输入线EXTI_InitStruct.EXTI_Line=EXTI_Line0;EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising_Falling;EXTI_InitStruct.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStruct);
}
main.c
#include "stm32f10x.h"
#include "bsp_led.h"
#include "key.h"
#include "delay.h"
#include "exti.h"
int main(void)
{#if 0uint8_t a;LED_GPIO_Config();Key_GPIO_Config();delay_init();LED_0(OFF);LED_1(OFF);while(1){a=Key_Scan();if(a!=0){if(a==1){LED_0_TOGGLE;}else if(a==2){LED_1_TOGGLE;}else if(a==3){LED_0_TOGGLE;LED_1_TOGGLE;}}}#elseLED_GPIO_Config();Key_GPIO_Config();EXTI_Key_Config();while(1){}#endif
}

STM32入门(十四)----EXTI相关推荐

  1. STM32入门(四)PWM与电机驱动

    STM32入门(四)PWM与电机驱动 一.PWM 所谓PWM,就是脉冲宽度调制技术,其具有两个很重要的参数:频率和占空比.频率,就是周期的倒数:占空比,就是高电平在一个周期内所占的比例.PWM方波的示 ...

  2. STM32 之十四 System Memory、Bootloader

      由于工作的需要,最近学习了一下 STM32F4 MCU 中的 BootLoader.对比了 ST 的其他系列的的 MCU,关于 Bootloader 这部分原理基本都是一样的,无非就是配置项多少的 ...

  3. java怎样用类模板创建对象_java入门(十四) | 面向对象(OOP)之类和对象

    上一期是变量,在java中变量总是无处不在,而变量其意就是可以改变的数,在一般情况下我们可以以变量类型,变量名,变量值来描述它 这一期是给面向对象(OOP)开了一个头,对他的概念,三大特征有了一个基础 ...

  4. slam入门——十四讲笔记(一)

    文章目录 第1讲 预备知识 第1部分 数学基础 第2讲 初识SLAM 2.1 引子:小萝卜的例子 2.2 经典视觉SLAM框架 2.3 SLAM问题的数学表述 2.4 实践:编程基础 1. 安装Lin ...

  5. stm32入门(四): 串口

    关于串口转换 转换串口的时候注意不同串口的挂载总线,注意把所有串口的名称都换掉 串口寄存器 USART-SR 状态寄存器:TC发送完成 RXNE 读数据寄存器非空 USART-DR 数据寄存器 DR[ ...

  6. python3行3列文件数据赋值_Python3快速入门(十四)——Pandas数据读取

    Python3快速入门(十四)--Pandas数据读取 一.DataFrame IO 1.CSV文件 pandas.read_csv(filepath_or_buffer, na_values='NA ...

  7. IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<上网慢?经常掉线?这篇文章告诉你该怎么办!>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注 ...

  8. 假赋值java_Java十四天零基础入门-Java赋值运算符

    不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货 Java赋值运算符 赋值运算符目前也是只需要掌握=.+=.-=.*=./=.%=,其它和二进制相关的内容也是到后面遇到的时候再详细学习.赋值 ...

  9. Java从键盘输入n行字符串_Java十四天零基础入门-Java布尔类型

    不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货 Java布尔类型 在Java语言中布尔类型的值只包括true和false,没有其他值,不包括1和0,布尔类型的数据在开发中主要使用在逻辑判断 ...

  10. springboot mybatis ehcache_SpringBoot入门建站全系列(十四)集成Redis缓存

    SpringBoot入门建站全系列(十四)集成Redis缓存 一.概述 本地缓存,就是使用应用内使用本地内存将数据暂缓存储,一般数据库的查询如果不怎么改动,可以用本地缓存暂存. 远程缓存,比如redi ...

最新文章

  1. Cell Reports:去除宿主和胞外DNA以提高微生物基因组得率(痰液样本)
  2. 黄埔大学,选址定了!
  3. mysql lbs 计算距离_使用mysql的lbs根据经纬度计算距离
  4. java btrace_BTrace for Java应用程序简介
  5. pythonfor循环加2_python中for循环如何实现每次控制变量翻倍
  6. appinventor广州服务器网页,app inventor服务器
  7. utl_file包的使用
  8. java quartz实例_Java任务调度框架Quartz教程实例
  9. JSTL fmt 标签 使用
  10. 快速突破面试算法之排序篇
  11. 深度装机大师一键重装_手把手教你深度装机大师u盘装系统教程
  12. 图表控件ScottPlot
  13. excel对比两列不同
  14. 华盛顿大学计算机科学,华盛顿大学UW(University of Washington)计算机科学Computer Science专业排名第21位(2021年THE世界大学商科排名)...
  15. 视频剪辑工具,视频怎样批量加背景音乐和特效
  16. 编写Outlook html邮件
  17. w7 w10 如何开启远程桌面简易版
  18. 搜狗输入法 状态栏 自带的好用工具
  19. 大一第二学期课程总结
  20. VL (Vision and Language) 任务简介及数据集

热门文章

  1. 思科仿真实验--RIP协议动态路由配置
  2. nmtui、nmcli
  3. python转utf-8编码_python3中utf-8编码如何转换?
  4. coredns部署配置
  5. Windows解决电脑卡顿方法之清理缓存
  6. 肯德基问题鸡事件新进展
  7. Qt 在Windows下设置Wifi连接和有线连接
  8. 谷歌Chrome浏览器发现地址欺骗安全漏洞
  9. Node 版本管理 快速切换版本、版本回退(降级)、版本更新(升级)
  10. 20170601メモbaijiahao