完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.外部中断
(1)stm32的每一个IO都可以作为外部中断输入。 (2)stm32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到USB唤醒事件。 每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。 2.IO与中断线的对应 (112IO对应16个中断线) STM32 是这样设计,GPIO 的管教 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0-15。这样每个中断线对应了最多 7 个 IO 口,以线 0 为例:它对应了 GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、 GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到 1 个 IO 口上,这样就需要通过配置来 决定对应的中断线配置到哪个 GPIO 上了。下面我们看看 GPIO 跟中断线的映射关系图: 对于每一个中断线,我们可以设置相应的触发方式(上升沿触发,下降沿触发,边沿触发)以及使能 。 3.中断服务函数 IO口外部中断在中断向量表只分配了7个中断向量,也就是只能使用7个中断服务函数 外部中断线5-9分配一个终端向量,共用一个服务函数外部中断线10-15分配一个中断向量,共用一个中断服务函数。 中断服务函数列表: EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler 4.配置外部中断 (1)设置IO口与中断线的映射关系 void GPIO_Init(); void RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 使能 AFIO 时钟 void GPIO_EXITLineConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource); (2)初始化中断线:触发方式等 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); (3)判断中断线中断状态,是否发生且配置中断分组(NVIC),并编写中断服务函数 void ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); void NVIC_Init(); void EXTIx_IRQHandler(); (4)清除中断线上的中断标志位 void EXTI_ClearITPendingBit(uint32_t EXTI_Line); 代码: exti.h #ifndef __EXTI_H #define __EXTI_H #include “sys.h” void EXTIX_Init(void); void EXTI4_IRQHandler(void); #endif exti.c #include “exti.h” #include “key.h” #include “delay.h” #include “led.h” void EXTIX_Init(void) { EXTI_InitTypeDef EXTI_InitStrue; NVIC_InitTypeDef NVIC_InitStrue; key_Init();//按键端口初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能 AFIO 时钟 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);//GPIOE.4中 断线以及中断初始化配置,下降沿触发 EXTI_InitStrue.EXTI_Line=EXTI_Line4; EXTI_InitStrue.EXTI_LineCmd=ENABLE; EXTI_InitStrue.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式 EXTI_InitStrue.EXTI_Trigger=EXTI_Trigger_Falling;//设置下降沿触发 EXTI_Init(&EXTI_InitStrue);//初始化 EXTI 寄存器 NVIC_InitStrue.NVIC_IRQChannel=EXTI4_IRQn; //使能按键外部中断通道 NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;//使能外部中断通道 NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级 2, NVIC_InitStrue.NVIC_IRQChannelSubPriority=2;//子优先级 2 NVIC_Init(&NVIC_InitStrue);//初始化 NVIC } void EXTI4_IRQHandler(void) { delay_ms(10);//消抖 if(KEY0==0) { LED1=!LED1; LED0=!LED0; } EXTI_ClearITPendingBit(EXTI_Line4);//清除 LINE4 上的中断标志位 } main.c #include “stm32f10x.h” #include “exti.h” #include “delay.h” #include “led.h” #include “key.h” int main(void) { LED_Init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置 NVIC 中断分组 2 EXTIX_Init();//外部中断初始化 delay_init(); while(1) { delay_ms(1000); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1758 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1053 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1931浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
721浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
563浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 00:09 , Processed in 0.826698 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号