完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.软件及工程环境搭建
- M4中断优先级(分三种): 抢占优先级:含义是不同等级间的中断可以嵌套,高优先级可以中断低优先级,数字小的优先级高。 响应优先级:含义是不同响应优先级的中断不能嵌套,但是当抢占优先级相同,响应优先级不同,多个中断源同时发生中断时候,响应优先级高的中断事件会优先响应,数字小的优先级高。 自然优先级:就是NVIC控制器的中断源编号,数字小的,优先级高。作用:当抢占优先级和响应优先级都相同的中断源同时发生中断时候,自动优先级高的优先响应。不存在嵌套行行。 优先级等级小结:抢占优先级>响应优先级>自然优先级占优先级决定是否可以嵌套,响应优先级和自然优先级决定同时发生时,先响应谁(如果抢占相同,才依据响应,如果抢占和响应都相同,自然优先级才会起作用) - NVIC控制器一般步骤:
先LED初始化,就不写了,第一天的有,中断配置不太了解的,可以去看看第三天的,那就开始了哦,Exit_Init初始化 /******************************************************* *函数名:Exit_Init *功 能: NVIC中断初始化 *参 数:无 *返 回:无 *备 注:注意开启PA0,PD2的PC12的映射SYSCFG时钟 ,使能外部中断 ********************************************************/ void Exit_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//开启SYSCFG时钟,简称重映射 EXTI_InitTypeDef Exit_Key1,Exit_Key2,Exit_Key3;//定义外部中断结构体变量 //key1 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0); //映射到PA0引脚到EXTI Exit_Key1.EXTI_Line = EXTI_Line0; //选择EXTI0 Exit_Key1.EXTI_Mode = EXTI_Mode_Interrupt; // 选择模式(中断) Exit_Key1.EXTI_Trigger = EXTI_Trigger_Rising;//选择上升沿触 Exit_Key1.EXTI_LineCmd = ENABLE;//启用EXTI0 EXTI_Init(&Exit_Key1);//写入EXTI初始化 NVIC_SetPriority(EXTI0_IRQn,NVIC_EncodePriority(0x05,1,1));//NVIC,响应分组二,抢占优先级一,响应优先级一 NVIC_EnableIRQ(EXTI0_IRQn);//使能外部中断0线进行工作 //key2 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD,EXTI_PinSource2); //映射到PD2引脚到EXTI2 Exit_Key2.EXTI_Line = EXTI_Line2; //选择EXTI2 Exit_Key2.EXTI_Mode = EXTI_Mode_Interrupt; // 选择模式(中断) Exit_Key2.EXTI_Trigger = EXTI_Trigger_Falling;//选择下升沿触 Exit_Key2.EXTI_LineCmd = ENABLE;启用EXTI2 EXTI_Init(&Exit_Key2);//写入EXTI初始化 NVIC_SetPriority(EXTI2_IRQn,NVIC_EncodePriority(5,2,2));//NVIC,响应分组二,抢占优先级二,响应优先级二 NVIC_EnableIRQ(EXTI2_IRQn);//使能外部中断2线进行工作 //key3 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource12); //映射到PC12引脚到EXTI3 Exit_Key3.EXTI_Line = EXTI_Line12; //选择EXTI12 Exit_Key3.EXTI_Mode = EXTI_Mode_Interrupt; // 选择模式(中断) Exit_Key3.EXTI_Trigger = EXTI_Trigger_Falling;//选择下升沿触 Exit_Key3.EXTI_LineCmd = ENABLE;//启用EXTI3 EXTI_Init(&Exit_Key3);//写入EXTI初始化 NVIC_SetPriority(EXTI15_10_IRQn,NVIC_EncodePriority(5,1,1));//NVIC,响应分组二,抢占优先级一,响应优先级一 NVIC_EnableIRQ(EXTI15_10_IRQn);//由于没有EXTI12,所以使能外部中断15_10线进行工作 } 总结一下:响应分组要一致看自己需要配置,抢占优先级越低抢的厉害,假如抢占优先级相同,响应优先级越低,没用抢不了。响应优先级只是比同时谁先用而已。追加:如果对应的不设置NVIC;那他默认是抢占优先级零,响应优先级零。 功能: /******************************************************* *函数名:EXTI0_IRQHandler *功 能:按键一中断 *参 数:无 *返 回:无 *备 注:注意挂起寄存器(清0) ********************************************************/ int EXTI1_flag; void EXTI0_IRQHandler(void)//由中断自动触发 { EXTI_ClearFlag(EXTI_Line0); //挂起寄存器PA0 EXTI1_flag++; if(EXTI1_flag%2) GPIO_ResetBits(GPIOC,GPIO_Pin_13); else GPIO_SetBits(GPIOC,GPIO_Pin_13); } /******************************************************* *函数名:EXTI0_IRQHandler *功 能:按键二中断 *参 数:无 *返 回:无 *备 注:注意挂起寄存器(清0) ********************************************************/ int EXTI2_flag; void EXTI2_IRQHandler(void)//由中断自动触发 { EXTI_ClearFlag(EXTI_Line2); //挂起寄存器PD2 EXTI2_flag++; if(EXTI2_flag%2) GPIO_ResetBits(GPIOC,GPIO_Pin_10); else GPIO_SetBits(GPIOC,GPIO_Pin_10); while(1) { }; } /******************************************************* *函数名:EXTI0_IRQHandler *功 能:按键三中断 *参 数:无 *返 回:无 *备 注:注意挂起寄存器(清0) ********************************************************/ int EXTI3_flag; void EXTI15_10_IRQHandler(void) { EXTI3_flag++; if(EXTI3_flag%2) GPIO_ResetBits(GPIOC,GPIO_Pin_11); else GPIO_SetBits(GPIOC,GPIO_Pin_11); EXTI_ClearFlag(EXTI_Line12); //挂起寄存器PC2 } 总结一下:点击按键二是死循环,通过优先级控制按键一和按键三打断。 - 主函数main调用相关的函数 //SCB->AIRCR =0X05FA<<16 |5<<8; //纯寄存器设置写入秘钥,设置分组为2 NVIC_SetPriorityGrouping(5); //NVIV函数设置分组2,4个位,高2位作为抢占,低2位作为响应 LEDInit();//LED初始化 Exit_Init();//按键NVIC中断初始化 while(1) { //嵌入式少不了while(1),要程序一直执行的 } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1804 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1097 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
736 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1686 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
747浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
580浏览 3评论
602浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 10:38 , Processed in 0.777191 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号