欢迎来到天天文库
浏览记录
ID:34707990
大小:50.26 KB
页数:3页
时间:2019-03-09
《stm32简记之nvic和外部中断》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、STM32简记之NVIC和外部中断Postedon2013/06/20byM1之前用stm32也就是用些内部资源或者耍耍前辈留下来的库,最近在写SPWM波的时候才知道自己对于中断这方面的欠缺,更暴漏了我学东西不打基础的恶习,所以打算重新整理下资料,原因有二:1、通过这种方式能加深记忆。2、方便以后查看。因为只追求自己看得懂所以总结的比较简洁,所以称之为简记。步骤如下:1、系统初始化,如系统时钟初始化,使之进入72MHZ主频;程序启动时已调用SystemInit()函数将主频改为72MHZ。2、GPIO配置,务必注意打
2、开GPIO时钟时,一定打开AFIO时钟。在使用引脚的重映射功能和外部中断时需要使用AFIO时钟。3、EXTI配置,在这里配置需要选择哪个引脚作为中断引脚。 EXTI_InitTypeDefEXTI_InitStructure;定义一个EXTI初始化结构体 EXTI_InitStructure.EXTI_Line=EXTI_Line1;设置中断线:EXTIL_Line1为中断线1 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;模式:这里有两个模式,一个是中
3、断模式,也就是事件,具体区别如下:“事件:是表示检测有一某件触发事件发生了。中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。事件可以触发中断,也可以不触发中断有可能被更优先的中断屏蔽,事件不会事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒).事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号” EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;设置触发中断方式:EXTI_Trigger_Falling设置输入线路下
4、降沿为中断请求EXTI_Trigger_Rising设置输入线路上升沿为中断请求EXTI_Trigger_Rising_Falling设置输入线路上升沿和下降沿为中断请求 EXTI_InitStructure.EXTI_LineCmd=ENABLE;定义选择中断线的新状态 EXTI_Init(&EXTI_InitStructure); 根据EXTI_InitStructure中指定的参数初始化外设EXTI寄存器。4、NVIC配置,这也是比单片机多出来的部分,我们必须把NVIC中对应的通道使能,并且设置优先级
5、别。NVIC(嵌套中断向量控制器),用于管理中断优先级。比如在英语四级考试期间,饭堂特殊情况,监考老师优先打饭(抢占优先级),但是监考老师与监考老师之间也要排队(响应优先级),也就是说监考老师可以直接来抢断学生打饭的位置,但是监考老师与监考老师之间必须排队,不能抢断。STM32中指定优先级的寄存器为4位,其定义如下:第0组:所有4位用于指定响应优先级第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级第3组:最高3位用于指定抢占式优先级,最低
6、1位用于指定响应优先级第4组:所有4位用于指定抢占式优先级可以通过voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)来设定。例如:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1)//设置位第1组配置外部中断1优先级: NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn; //配置中断通道 NVIC_InitStructure.NVIC_IRQChannelPree
7、mptionPriority=0; //抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//改中断NVIC的新状态 NVIC_Init(&NVIC_InitStructure);//按照结构体内容定义该通道NVIC5、编写中断函数。在启动文件(startup_stm32f10x_hd.s)中找到中断函数名称,将其加在stm32f10x_it.
8、c内,例如:voidEXTI2_IRQHandler(void){ delay_init(); delay_ms(580); flag=!flag; if(flag) { GPIO_SetBits(GPIOE,GPIO_Pin_4); } else { GPIO_ResetBits(GPIOE
此文档下载收益归作者所有