stm32EXTI配置

合集下载

STM32外部输入中断配置流程图

STM32外部输入中断配置流程图

外部输入中断配置步骤 输入IO 初始化 ●设置外部中断输入的IO 口状态
开启AFIO 时钟 ●开启IO 口复用时钟
中断服务子程序 ●编写中断服务函数
配置NVIC ●配置中断分组(NVIC ),优先级,并使能中断。

配置EXTI 各寄存器 ●触发方式、中断开关等
IO 与EXTI 线连接 ●配置外部中断配置寄存器AFIO_EXTICR
可以设置为上拉/下拉输入,浮空输入;推荐设置上拉/
下拉输入。

STM32的IO 口与中断线的对应关系需要配置外部中断配置寄存器EXTICR
中断屏蔽寄存器(EXTI_IMR) 事件屏蔽寄存器(EXTI_EMR)
上升沿触发选择寄存器(EXTI_RTSR) 下降沿触发选择寄存器(EXTI_FTSR) 软件中断事件寄存器(EXTI_SWIER) 挂起寄存器(EXTI_PR) 寄存器SCB->AIRCR :设置中断分组
寄存器组IPR[15]:设置主优先级,从优先级。

简述exti的使用过程

简述exti的使用过程

简述exti的使用过程
EXTI(External Interrupt)是单片机外部中断的缩写,是STM32F4系列微控制器中的外部中断控制器,它可以通过检测外部信号的变化来触发中断。

在使用EXTI前,需要进行以下几个步骤:
1. 使能GPIO时钟:需要使能所用GPIO的时钟,以便使用其引脚作为中断源。

2. 配置GPIO引脚:需要将引脚配置为输入模式,并选择中断触发方式,如下降沿触发、上升沿触发等。

3. 选择EXTI通道:需要选择EXTI通道,即与所选GPIO引脚相对应的中断通道。

4. 配置NVIC:需要配置中断优先级和中断服务函数。

在完成以上几个步骤后,即可使用EXTI进行中断处理。

当所选GPIO引脚发生中断触发事件时,即可触发中断服务函数。

可以在中断服务函数中编写相应的程序来处理中断事件。

需要注意的是,由于外部中断的响应速度较快,因此在中断服务函数中应尽量避免耗时操作,以免影响系统的响应速度。

总之,EXTI是STM32F4系列微控制器中的外部中断控制器,可用于检测外部信号的变化并触发中断服务函数,需要进行一定的配置和设置后才能使用。

STM32的exti中断调试遇到一奇怪问题总结

STM32的exti中断调试遇到一奇怪问题总结

STM32的exti中断调试遇到一奇怪问题总

前两日调试EXTI 中断程序,程序很简单抄了网上
的范例,起初调试正常,可以正常运行,但我在程序中
加入另外的代码后问题出现,表现为中断莫名其妙的开
始响应!检查自己的程序,未发现异常,中断部分的设
置也没有为题。

逐步屏蔽后加入的代码,依据屏蔽的代
码不同,单步运行后从不同的位置跳入中断。

怪哉怪哉....反复调试若干遍,花费时间2天有余...
百思不得其解之际,又检查了自己的板子,看到BOOT1
悬空,心中一动,当初图省事,空了此脚,难不成问题
在此?
找了调帽装上,一切正常,吐血....
.....(心里活动省略200字)
原来
虽然boot0置0了,但是boot1还是不能悬空的呀!
---------------------------------------------------
另外一个小技巧:调试程序后进入中断,未清除中断退
出debug模式,再次debug的时候因为iar 5.20 debug 的复位功能并未自动清除中断,所以此时程序会自行进
入中断,对调试造成困扰,解决方法是在main中第一句就放入中断清除语句。

运行复位运行就正常了,就不用再手动去按板子上的reset了。

奋斗STM32V3版按键中断_EXTI_例程

奋斗STM32V3版按键中断_EXTI_例程
奋斗版 STM32 开发板例程详解———按键中断实验

按键中断(EXTI)例程实验
实验平台:奋斗版STM32开发板V2、V2.1、V3 实验内容:板子加电后,按动板子上K1-K3按键,可控制对应的LED1-LED3的亮 灭,该实验学习了外部中断(EXTI)程序的编制及控制流程。
4.2 硬件电路设计
在开发板上V6、V7、V8分别与MCU的PB5、PD6、PD3相连,如下图所示
淘宝店铺:
11
奋斗版 STM32 开发板例程详解———按键中断实验

键盘部分如下图所示: 例程所用到的列扫描线:PC5,PC2,PC3。 例程所用到的行扫描线(EXTI中断线):PE2。
上升沿触发选择寄存器(EXTI_RTSR) 偏移地址:08H 复位值:0000 0000h
注意: 外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。 在写EXTI_RTSR 寄存器时在外部中断线上的上升沿信号不能被识别,挂起位不会被置 位。在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断。
1.2 外部中断配置寄存器2(AFIO_EXTICR2)
地址偏移:0Ch 复位值:0000h
淘宝店铺:
1
奋斗版 STM32 开发板例程详解———按键中断实验

1.3 外部中断配置寄存器3(AFIO_EXTICR3)
地址偏移:10h 复位值:0000h
1.4 外部中断配置寄存器4(AFIO_EXTICR4)
地址偏移:14h 复位值:0000h
淘宝店铺:
2
奋斗版 STM32 开发板例程详解———按键中断实验

2.1 嵌套向量中断控制器(NVIC)
淘宝店铺:
7

stm32差分编码器编程实例

stm32差分编码器编程实例

stm32差分编码器编程实例
当使用 STM32 微控制器编程时,可以通过外部差分编码器来实现位置或速度的测量。

下面是一个简单的 STM32 差分编码器编程实例,以帮助您了解如何进行编程:
1. 首先,确保您已经正确连接了差分编码器到 STM32 微控制器的外部引脚。

通常,差分编码器会有两个输出信号通道(通常称为 A 和 B 通道),以及一个用于指示方向的 Z 通道。

2. 在 STM32 的开发环境中,创建一个新的工程,并选择适当的 STM32 型号。

3. 在工程中,将差分编码器的 A 和 B 通道连接到 STM32 的两个外部中断引脚(例如 EXTI0 和 EXTI1)。

4. 在工程中,将差分编码器的 Z 通道连接到 STM32 的另一个外部中断引脚(例如 EXTI2)。

5. 在代码中,启用外部中断功能,并配置外部中断触发方式为上升沿或下降沿触发。

6. 在外部中断的中断处理函数中,编写代码来处理差分编码器的输出信号变化。

根据差分编码器的工作原理,每当 A 或 B 通道的信号变化时,都会触发外部中断。

您可以在中断处理函数中根据A 和 B 通道的状态变化来判断编码器的旋转方向,并相应地更新位置或速度的计数器。

7. 如果需要使用 Z 通道来确定编码器的起始位置,您可以在Z 通道的中断处理函数中重置位置或速度的计数器。

8. 在主程序中,您可以使用位置或速度的计数器值来执行相应的操作,例如控制电机或执行其他任务。

需要注意的是,具体的差分编码器编程实例可能会根据使用的STM32 型号和开发环境有所不同。

因此,您可以参考 STM32 的官方文档和相关的编程手册来获取更详细的信息和示例代码。

stm32外部中断实验报告-STM32实例外部中断实验

stm32外部中断实验报告-STM32实例外部中断实验

stm32外部中断实验报告_STM32实例外部中断实验上⼀篇⽂章我们介绍了 STM32F10x 的中断,这次我们就来学习下外部中断。

本⽂中要实现的功能与按键实验⼀样,即通过按键控制LED,只不过这⾥采⽤外部中断⽅式进⾏控制。

学习时可以参考《STM32F10x 中⽂参考⼿册》-9 中断和事件章节。

外部中断介绍EXTI 简介STM32F10x 外部中断/事件控制器(EXTI)包含多达 20 个⽤于产⽣事件/中断请求的边沿检测器。

EXTI 的每根输⼊线都可单独进⾏配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发),还可独⽴地被屏蔽。

EXTI 结构框图EXTI 框图包含了 EXTI 最核⼼内容,掌握了此框图,对 EXTI 就有⼀个全局的把握,在编程的时候思路就⾮常清晰。

从图中可以看到,有很多信号线上都有标号 9 样的“20”字样,这个表⽰在控制器内部类似的信号线路有 20 个,这与 STM32F10x 的 EXTI 总共有20 个中断/事件线是吻合的。

因此我们只需要理解其中⼀个的原理,其他的 19个线路原理都是⼀样的。

EXTI 分为两⼤部分功能,⼀个产⽣中断,另⼀个产⽣事件,这两个功能从硬件上就有所差别,这个在框图中也有体现。

从图中标号 3 的位置处就分出了两条线路,⼀条是 3-4-5 ⽤于产⽣中断,另⼀条是 3-6-7-8⽤于产⽣事件。

下⾯我们就来介绍下这两条线路:(1)⾸先看下产⽣中断的这条线路(1-2-3-4-5)1.标号 1 为输⼊线,EXTI 控制器有 20 个中断/事件输⼊线,这些输⼊线可以通过寄存器设置为任意⼀个 GPIO,也可以是⼀些外设的事件,这部分内容我们会在后⾯专门讲解。

输⼊线⼀般是存在电平变化的信号。

2.边沿检测电路,EXTI 可以对触发⽅式进⾏选择,通过上升沿触发选择寄存器和下降沿触发选择寄存器对应位的设置来控制信号触发。

边沿检测电路以输⼊线作为信号输⼊端,如果检测到有边沿跳变就输出有效信号 1 给红⾊框 3 电路,否则输出⽆效信号 0。

野火F1开发板STM32案例-外部中断(按键)使用

野火F1开发板STM32案例-外部中断(按键)使用

野⽕F1开发板STM32案例-外部中断(按键)使⽤野⽕F1开发板STM32案例-外部中断(按键)使⽤硬件平台野⽕STM32F103ZET6 霸道V2开发板正点原⼦F1系列开发板软件平台Keil MDK 5.31串⼝调试助⼿Gitee .中断相关概念中断配置寄存器# 配置中断时,使⽤ISER、 ICER 和 IP 寄存器,## ISER 是中断使能寄存器## ICER 是中断清除寄存器## IP 是中断优先级寄存器中断优先级1. 数值越⼩,优先级越⾼2. STM32F103 中只使⽤4位,⾼4位有效。

3. ⽤于表达优先级的⾼ 4 位⼜被分组成抢占式优先级和响应优先级,称为“亚优先级”或“副优先级”4. 每个中断源都需要被指定这两种优先级。

中断配置步骤1.使能外设中断6. 设置中断优先级分组初始化 NVIC_InitTypeDef 结构体,设置抢占优先级和响应优先级,使能中断请求。

typedef struct{uint8_t NVIC_IRQChannel; //中断源uint8_t NVIC_IRQChannelPreemptionPriority; //抢占优先级uint8_t NVIC_IRQChannelSubPriority; //响应优先级FunctionalState NVIC_IRQChannelCmd; //中断使能或失能} NVIC_InitTypeDef;NVIC_IRQChannel 中断源:中断源的设置,不同的外设中断,中断源不⼀样NVIC_IRQChannelPreemptionPriority //抢占优先级NVIC_IRQChannelSubPriority //响应优先级NVIC_IRQChannelCmd //中断使能或失能:使能配置为 ENABLE,失能配置为 DISABLE。

NVIC_IRQChannel //中断源/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt *//****** STM32 specific Interrupt Numbers *********************************************************/WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */TAMPER_IRQn = 2, /*!< Tamper Interrupt */RTC_IRQn = 3, /*!< RTC global Interrupt */FLASH_IRQn = 4, /*!< FLASH global Interrupt */RCC_IRQn = 5, /*!< RCC global Interrupt */EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */DMA1_Channel1_IRQn = 11, /*!< DMA1 Channel 1 global Interrupt */DMA1_Channel2_IRQn = 12, /*!< DMA1 Channel 2 global Interrupt */DMA1_Channel3_IRQn = 13, /*!< DMA1 Channel 3 global Interrupt */DMA1_Channel4_IRQn = 14, /*!< DMA1 Channel 4 global Interrupt */DMA1_Channel5_IRQn = 15, /*!< DMA1 Channel 5 global Interrupt */DMA1_Channel6_IRQn = 16, /*!< DMA1 Channel 6 global Interrupt */DMA1_Channel7_IRQn = 17, /*!< DMA1 Channel 7 global Interrupt */STM32F103 中断向量表EXTI外部中断1. STM32F10x 外部中断/事件控制器(EXTI)包含多达 20 个⽤于产⽣事件/中断请求的边沿检测器。

STM32-PVD编程及EXTI_Line16中断设置 附图

STM32-PVD编程及EXTI_Line16中断设置 附图

先看一下这2张截自STM32参考手册的图片:下面这张表截自STM32F103x8/B的数据手册,对上图的参数给出了具体数值:下面对上面2张图和表格中的数据做一个简要的解释:1)PVD = Programmable Votage Detector 可编程电压监测器它的作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。

在给出表格的上半部分就是可编程的监视阀值数据。

当供电电压又恢复到给定的阀值以上时,也会产生一个中断,通知软件供电恢复。

供电下降的阀值与供电上升的PVD阀值有一个固定的差值,这就是表中的VPVDhyst(PVD迟滞)这个参数,通过列出的PVD阀值数据可以看到这个差别。

引入这个差值的目的是为了防止电压在阀值上下小幅抖动,而频繁地产生中断。

2)POR = Power On Reset 上电复位;PDR = Power Down Reset 掉电复位。

POR的功能是在VDD电压由低向高上升越过规定的阀值之前,保持芯片复位,当越过这个阀值后的一小段时间后(图中的"滞后时间"或表中的"复位迟滞"),结束复位并取复位向量,开始执行指令。

这个阀值就是表中倒数第4行(min=1.8V,typ=1.88V,max=1.96V)。

POR的功能是在VDD电压由高向低下降越过规定的阀值后,将在芯片内部产生复位,这个阀值就是表中倒数第3行(min=1.84V,typ=1.92V,max=2.0V)。

3)可以看到POR比PDR大了0.04V,这就是表中倒数第2行,VPDRhyst(PDR迟滞)=40mV。

4)从上面的第2张图可以看到,当VDD上升越过POR阀值时,内部并不马上结束复位,而是等待一小段时间(Reset temporization),这就是表中的最后一行TRSTTEMPO,它的典型数值是2.5ms。

这个滞后时间是为了等待供电电压能够升高到最低可靠工作电压以上,我们看到POR阀值最小只有1.8V,最大也只有1.96V,都低于数据手册中给出的最低可靠工作电压2.0V,所以这个滞后时间是十分必要的,如果供电电压上升缓慢,尤其是从1.8V升到2.0V以上超过1~2.5ms,则很可能造成上电复位后MCU不能正常工作的情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EXTI配置规则
配置时钟→初始化IO口→配置中端向量优先级→指定中断IO口→中断方式→使能中断→写中断函数
主函数
Void main (void)
{
开启用到的外设时钟
Void RCC_Configuation();
初始化IO口
Void IO_Configuation();
中断设置
Void EXTI_Configuation()
{
定义结构变量
EXTI_InitTypeDef EXTI_InitStructure;
清除中断标志
EXTI_ClearPendingBit(EXTI_Linex);
选择中断管脚
GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcex)
选择中段线路
EXTI_InitStructure.EXTI_Line(EXTI_Linex);
中断模式
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
中断触发方式
EXTI_InitStructure.EXTI_Trigger=EXTI_Teigger_Rising_Falling;
中段线路使能
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
初始化设置
EXTI_Init(&EXTI_InitStucture);
}
配置中断向量优先级
Void NVIC_Configuation()
{
定义结构(只定义一次)
NVIC_InitTypeDef NVIC_InitStructure;
选择中断分组(选择一次)
NVIC_PriorityGroupConfig(NVIC_Priority_group_x);
选择中断通道
NVIC_InitStructure.NVIC_IRQChannel=EXTIx_IRQChannel;
抢占式中断优先级设置
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=x;
响应式中断优先级设置
NVIC_InitStructure.NVIC_IRQChannelSubPriority=x;
使能中断
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
初始化设置
NVIC_Init(&NVIC_InitStruction);
}
死循环
While(1);
}
中断函数
Void EXTIx_IRQHandler(voie)
{
点亮LED
GPIO_SetBits(GPIOx,GPIO_Pin_x);
清除中断标志
EXTI_ClearITPendingBit(EXTI_Linex);
}。

相关文档
最新文档