STM32 IO口中断
Title:STM32单片机系列(三)
Date: 2020-2-22
Author: Page
Categories:
-单片机
Tags:
-STM32F407
中断
STM32 F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 F4 的强大之处。 STM32 F407 的中断控制器支持 22 个外部
中断事件请求。每个中断设有状态位,每个中断事件都有独立的触发和屏蔽设置。 STM32 F407的 22 个外部中断为:
EXTI线 0~15 :对应外部 IO 口的输入中断。
EXTI线 16 :连接到 PVD 输出。
EXTI线 17 :连接到 RTC 闹钟事件。
EXTI线 18 :连接到 USB OTG FS 唤醒事件。
EXTI线 19 :连接到以太网唤醒事件。
EXTI线 20 :连接到 USB OTG HS( 在 FS 中配置 唤醒事件。
EXTI线 21 :连接到 RTC 入侵和时间戳事件。
EXTI线 22 :连接到 RTC 唤醒事件。
下面来重点介绍IO口的一些中断:
如图所示:
其中每一个中断线可以映射多个IO口,但是同组IO口里面一次只能有一个IO口占用中断线。如(PA0-PG0)是一组可以映射到中断线EXTI0但是一次只能有其中的一个IO口映射上去。
每一个中断线可以设置它的触发方式(上升沿触发,下降沿触发,边沿触发,上升沿和下降沿都可以触发)和使能位状态位。
IO在外部中断向量里面只分配了7个中断服务函数0,1,2,3,4,5-9,10-15
中断的基本配置方法:
1. 首先使能对应的时钟线:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);IO中断是挂载在APB2时钟线上的,通过设置ENABLE使能IO口时钟 2. 初始化中断:
第一个成员EXTI_Line 配置中断线,
第二个成员EXTI_Mode 分为了事件触发和中断触发俩种:
EXTI_Mode_Event
EXTI_Mode_Interrupt
第三个成员EXTI_Trigger 设置中断触发方式:
EXTI_Trigger_Rising 上升沿触发
EXTI_Trigger_Falling 下降沿触发
EXTI_Trigger_Rising_Falling 上升下降沿同时触发
第四个成员EXTI_LineCmd 使能对应的中断线:
ENABLE 使能
DISABLE 失能
3. 接下来配置中断向量:
第一个成员NVIC_IRQChannel 配置对应的中断通道:
可在IRQn_Type中查询对应的中断方式,由于数目太多在这里不一一列举
第二个成员NVIC_IRQChannelPreemptionPriority 配置该中断的抢占优先级:
抢占优先级分为四种用俩位二进制数表示 00 01 10 11 其中00最大
第三个成员NVIC_IRQChannelSubPriority 配置该中断的响应优先级:
同抢占优先级一样分为4种数字越大优先级数越低
第四个成员NVIC_IRQChannelCmd 使能对应中断向量组:
ENABLE 使能
DISABLE 失能
配置完以上就可以自由配置函数EXIT_IRQHandler()对应的中断服务函数(发生中断就跳转至函数里面)来达到自己想要的目的。
最后介绍几个关于中断的函数:
EXIT_GetITStatus()判断中断线上的中断是否发生。
EXIT_ClearITPendingBit()清楚对应线上的中断标志位。
RCC_APB2PeriphClockCmd()使能对应中断的时钟。
STM32 IO口中断
Title:STM32单片机系列(三)
Date: 2020-2-22
Author: Page
Categories:
-单片机
Tags:
-STM32F407
中断
STM32 F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 F4 的强大之处。 STM32 F407 的中断控制器支持 22 个外部
中断事件请求。每个中断设有状态位,每个中断事件都有独立的触发和屏蔽设置。 STM32 F407的 22 个外部中断为:
EXTI线 0~15 :对应外部 IO 口的输入中断。
EXTI线 16 :连接到 PVD 输出。
EXTI线 17 :连接到 RTC 闹钟事件。
EXTI线 18 :连接到 USB OTG FS 唤醒事件。
EXTI线 19 :连接到以太网唤醒事件。
EXTI线 20 :连接到 USB OTG HS( 在 FS 中配置 唤醒事件。
EXTI线 21 :连接到 RTC 入侵和时间戳事件。
EXTI线 22 :连接到 RTC 唤醒事件。
下面来重点介绍IO口的一些中断:
如图所示:
其中每一个中断线可以映射多个IO口,但是同组IO口里面一次只能有一个IO口占用中断线。如(PA0-PG0)是一组可以映射到中断线EXTI0但是一次只能有其中的一个IO口映射上去。
每一个中断线可以设置它的触发方式(上升沿触发,下降沿触发,边沿触发,上升沿和下降沿都可以触发)和使能位状态位。
IO在外部中断向量里面只分配了7个中断服务函数0,1,2,3,4,5-9,10-15
中断的基本配置方法:
1. 首先使能对应的时钟线:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);IO中断是挂载在APB2时钟线上的,通过设置ENABLE使能IO口时钟 2. 初始化中断:
第一个成员EXTI_Line 配置中断线,
第二个成员EXTI_Mode 分为了事件触发和中断触发俩种:
EXTI_Mode_Event
EXTI_Mode_Interrupt
第三个成员EXTI_Trigger 设置中断触发方式:
EXTI_Trigger_Rising 上升沿触发
EXTI_Trigger_Falling 下降沿触发
EXTI_Trigger_Rising_Falling 上升下降沿同时触发
第四个成员EXTI_LineCmd 使能对应的中断线:
ENABLE 使能
DISABLE 失能
3. 接下来配置中断向量:
第一个成员NVIC_IRQChannel 配置对应的中断通道:
可在IRQn_Type中查询对应的中断方式,由于数目太多在这里不一一列举
第二个成员NVIC_IRQChannelPreemptionPriority 配置该中断的抢占优先级:
抢占优先级分为四种用俩位二进制数表示 00 01 10 11 其中00最大
第三个成员NVIC_IRQChannelSubPriority 配置该中断的响应优先级:
同抢占优先级一样分为4种数字越大优先级数越低
第四个成员NVIC_IRQChannelCmd 使能对应中断向量组:
ENABLE 使能
DISABLE 失能
配置完以上就可以自由配置函数EXIT_IRQHandler()对应的中断服务函数(发生中断就跳转至函数里面)来达到自己想要的目的。
最后介绍几个关于中断的函数:
EXIT_GetITStatus()判断中断线上的中断是否发生。
EXIT_ClearITPendingBit()清楚对应线上的中断标志位。
RCC_APB2PeriphClockCmd()使能对应中断的时钟。
举报