(stm32f103学习总结)—stm32外部中断
一、外部中断介绍
1.1 EXTI简介
EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事 件/中断请求的边沿检测器。EXTI的每根输入线都可单独进行配置,以选 择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或 边沿触发),还可独立地被屏蔽。(stm32f103有19个)
1.2 EXTI结构框图
1.3 外部中断/事件线映射
STM32F10x的EXTI具有20个中断/事件线,如下:(stm32f103有19个以太网唤醒事件没有;stm32f107有20个)
二、外部中断配置步骤
(1)使能IO口时钟,配置IO口模式为输入
(2)开启 AFIO 时钟,设置 IO 口与中断线的映射关系
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //开启AFIO时钟
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); //设置IO 口与中断线的映射关系即哪个io口哪一个管脚作为中断输入线
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //这里以配置GPIOA口 GPIOA的第0管脚作为中断输入线
(3)配置中断分组(NVIC),使能中断
(4)初始化EXTI,选择触发方式
- 1 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
- 2 typedef struct
- 3 {
- 4 uint32_t EXTI_Line; //中断/事件线
- 5 EXTIMode_TypeDef EXTI_Mode; //EXTI模式
- 6 EXTITrigger_TypeDef EXTI_Trigger; //EXTI触发方式
- 7 FunctionalState EXTI_LineCmd; //中断线使能或失能
- 8 }EXTI_InitTypeDef;
(5)编写EXTI中断服务函数(中断函数固件库中已经定义必须使用下列函数名不能自己定义)
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
三、编写外部中断控制程序 要实现外部中断方式控制LED,程序框架如下:
(1)初始化对应端口的EXTI(第三部分中的1-4小步)
(2)编写EXTI中断函数
(3)编写主函数
- 1 /*******************************************************************************
- 2 * 函 数 名 : My_EXTI_Init
- 3 * 函数功能 : 外部中断初始化
- 4 * 输 入 : 无
- 5 * 输 出 : 无
- 6 *******************************************************************************/
- 7 void My_EXTI_Init(void)
- 8 {
- 9 NVIC_InitTypeDef NVIC_InitStructure;
- 10 EXTI_InitTypeDef EXTI_InitStructure;
- 11
- 12 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //AFIO使能
- 13 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//选择GPIO管脚用作外部中断线路
- 14 //EXTI0 NVIC 配置
- 15 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//EXTI0中断通道
- 16 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级
- 17 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级
- 18 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
- 19 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
- 20 //初始化EXTI 配置
- 21 EXTI_InitStructure.EXTI_Line=EXTI_Line0;
- 22 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
- 23 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
- 24 EXTI_InitStructure.EXTI_LineCmd=ENABLE;
- 25 EXTI_Init(&EXTI_InitStructure);
- 26 }
- 1 /*******************************************************************************
- 2 * 函 数 名 : EXTI0_IRQHandler
- 3 * 函数功能 : 外部中断0函数
- 4 * 输 入 : 无
- 5 * 输 出 : 无
- 6 *******************************************************************************/
- 7 void EXTI0_IRQHandler(void)
- 8 {
9 if(EXTI_GetITStatus(EXTI_Line3)==1) //判断EXTI中断标志位状态函数
10 {
11 //填写中断中需要完成的程序
12 }
13 EXTI_ClearITPendingBit(EXTI_Line3); //在结束中断服务函数前,清楚中断标志位- 14
- 15 }
(stm32f103学习总结)—stm32外部中断的更多相关文章
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- STM32学习笔记(九) 外部中断,待机模式和事件唤醒
学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...
- stm32 外部中断学习
今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...
- STM32外部中断初理解
PA0,PB0...PG0--->EXTI0 PA1,PB1...PG1--->EXTI1 ....... PA15,PB15...PG15--->EXTI15 以上为GPIO和中断 ...
- STM32外部中断具体解释
一.基本概念 ARM Coetex-M3内核共支持256个中断,当中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32眼下支持的中断共84个(16个内部+68个外部), ...
- 转别人的 STM32外部中断使用注意事项
前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...
- STM32 外部中断
1)STM32一般有19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB 唤醒事件. 2) ...
- STM32 外部中断详解(原理+配置代码)
本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断 文章目录 1 前言 2 STM32的外部中断 3 中断服务函数的映射关系 4 外部中断的配置 5 寄存器的 ...
- STM32——外部中断EXIT实现
外部中断实现步骤: 一.初始化,包括:1.AFIO时钟中断和GPIO时钟使能: 2.GPIO初始化 ...
随机推荐
- iOS动态库和静态库的运用
概念认识 什么是库 库是共享程序代码的方式,库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.在开发过程中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把 ...
- AcWing 207. 球形空间产生器
传送门 思路: 设球心坐标为(x1,x2,...,xn),有 ,由此我们可以列出N+1个二次方程,我们可以对前后两个方程做差,来得到N个一次方程,同时可以消掉常数C,第i个方程即 那么我们就可以直接采 ...
- 安装Android studio 并成功运行
之前是在idea上弄得发现有些问题就下载了Android studio教程(4条消息) Android Studio安装及环境配置教程_xuw_xy的博客-CSDN博客_androidstudio安装 ...
- IDEA 配置安卓(Android)开发环境
今天用idea配了一下环境,安装了SDK和Gradle.找了一些学习的资源,明天正式开始学习,配置环境的(3条消息) 用IntelliJ IDEA 配置安卓(Android)开发环境(一条龙服务,新手 ...
- linux配置vnc server,并用vnc viewer连接server
做过Linux运维的朋友都知道,我们一般很少直接与服务器接触.都是通过终端来连接处理一些事物. 本人常用的终端有图形界面的是vnc viewer还有命令行界面xshell,当然各有千秋,喜欢使用哪个都 ...
- Chrome:F12开发者模式下console不打印信息
控制台不打印信息的解决方法 你要看看你是否在之前进行过查找关键字操作,操作之后忘记删去这个关键字,导致console中只会留下对于该关键字的查询结果.
- broken pipe 报错分析和解决办法
参考资料: 1.博客1:https://blog.csdn.net/qq_37535749/article/details/113781338 2.博客2:https://blog.csdn.net/ ...
- Python的介绍与主要方向
1.1 编程与编程语言 python是一门编程语言,作为学习python的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? 编程的目的: 计算机的发明,是为了用机器取代/解放人力, ...
- pygame写俄罗斯方块
代码搬运修改自python编写俄罗斯方块 更新时间:2020年03月13日 09:39:17 作者:勤勉之 from tkinter import * from random import * imp ...
- UOJ188题解
我们先枚举一个最大质因子,然后设 \(dp[n][k]\) 为 \(n\) 以内使用了 \(pri[k]\) 以内的质数的数的最大质因子之和,答案就是: \[\sum_{k\leq n}dp[\lfl ...