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. hive mysql 不兼容_Hive+mySql遇到的问题和解决办法
  2. 听说这是互联网公司招工时忽悠的黑话? | 每日趣闻
  3. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp
  4. 数组越界怎么判断_算法连载之求解两个有序数组的中位数
  5. keytool 错误:java.to.FileNotFoundException:
  6. array_push_PHP array_push()函数与示例
  7. 问题 K: 数字统计
  8. 新的android包格式,在Android中注册新文件类型
  9. Java学习笔记 --- IDEA
  10. jquery api的整体解读
  11. AMOS分析技术:路径分析;用SPSS做路径分析麻烦?那就用AMOS分析吧
  12. laravel 下载使用
  13. mipad1小米平板1刷LOS神盾系统16睡死问题排查(一)
  14. 前端项目实战59-new URLSearchParams
  15. 通俗易懂的理解:什么是数据埋点?
  16. sqlDBX 链接 mysql 提示ODBC驱动不正确
  17. 怎么自测植物神经紊乱
  18. linux 对设备不适当的ioctl操作,似乎对设备的直接操作只有ioctl函数了
  19. cad用键盘放大缩小_CAD的放大缩小快捷键是什么?
  20. violate在c语言中的作用,Violate的应用和作用

热门文章

  1. Codeforces--- Dubstep
  2. java 接口中接受json数据
  3. 快播案上诉是否会对流量矿石有影响?
  4. markdown文件的基本常用编写语法-转自凌云之翼
  5. 照亮旷野的,是少年开发者眼中的炬火
  6. OpenCV图像处理-灰度处理
  7. 网络通信防止connect,accept,rend,write阻塞设置超时处理
  8. Numpy的数据类型
  9. 演进式设计——扫地机器人
  10. phpcms设计缺陷未审核文章也可看,解决