完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
概述
以简单使用为出发点,介绍关于stm32的外部中断配置过程。重点在于整个配置过程和内容,某些具体概念请查阅相关手册。以洋桃一号开发板为实验平台,程序功能:两个实体按键配置外部中断,在中断处理函数中分别对变量i进行0–9内的加减。即按下KEY1时i加一,按下KEY2i减一。同时将变量i在oled中显示出来。 过程 主程序每隔500ms将i在oled上输出刷新一次,比较简单,重点介绍中断配置过程。按照以下概念介绍先后顺序进行理解配置。 STM32中断优先级组配置 stm32单片机采用的是Cortex-M3内核,共有两个中断优先级:抢占式优先级和响应优先级,每个中断源都需要配置相应的优先级,从而进行中断处理。在这里进行的是优先级组的配置,即确认共有几个抢占式优先级和几个响应优先级。 这个配置在主程序中进行,只进行一次。 void NVIC_Configuration(void){ //嵌套中断向量控制器的设置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 } 关于优先级可参考以下理解(https://www.cnblogs.com/amanlikethis/p/7374163.html) 外部中断输入引脚配置 输入引脚配置为上拉输入,调用GPIO_Init(GPIOX,&GPIO_InitStructure); 中断引脚到中断线的连接 实验中采用PA0和PA1,在这里是将两个引脚PA0和PA1连接到外部中断线0和外部中断线1。所采用的F103C8单片机共有EXTI 0–15,16个外部中断,也就是16条中短线,PORT A–G的pin0-15对应配置到EXTI 0–15。 在这里需要注意的是,外部中断配置寄存器使用的是复用功能时钟,因此要打开AFIO时钟。即RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);然后再调用GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);配置中断线。 外部中断的控制 包括中断屏蔽控制,中断挂起控制,中断触发控制等。使用的是与GPIO控制相同的配置方法,需要定义一个结构体变量EXTI_InitTypeDef EXTI_InitStruct;对EXTI_Line、EXTI_LineCmd、EXTI_Mode、EXTI_Trigger进行配置,调用函数EXTI_Init()。 在中断处理控制器NVIC中设置中断 需要定义一个结构体变量NVIC_InitTypeDef NVIC_InitStruct;设置NVIC_IRQChannel(中断处理向量)、NVIC_IRQChannelCmd(向量使能)、NVIC_IRQChannelPreemptionPriority(设置抢占优先级)、NVIC_IRQChannelSubPriority(设置响应优先级)。 中断处理函数 中断向量入口固定,16个外部中断分配入口如下。 void EXTI0_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line0)!=RESET){//判断某个线上的中断是否发生 i++;//标志位置1,表示有按键中断 if(i==10) i=0; while(KEY1==0); EXTI_ClearITPendingBit(EXTI_Line0); //清除 LINE 上的中断标志位,是中断挂起寄存器的控制 } } 实现 个人认为这个过程是比较符合逻辑的,按照做事的先后顺序准备工作,最终的目的就是事情发生后能够按照既定的方向顺利执行。 过程1是一个系统级的设置,是对整个单片机中断系统的优先级设置。只要有中断,无论中断源是哪个,都要有过程1的配置。 有了过程1的优先级分组,这时我们可以假设有了一个外部中断小蝌蚪(正跳变或者负跳变)过来。外部中断占用一个GPIO口,作为输入,首先要配置成输入模式,也就是过程2,这时小蝌蚪顺利进入单片机内部。接下来是要将这个IO口与外部中断输入线连接起来,也就是过程3,有了过程3,小蝌蚪通过中断线进入到筛选处理过程。过程3也有一个小逻辑就是,对于外部中断线0,它可能的输入IO口就是PA0或PB0或PC0–PG0,同理至中断线1–15,分别对应P_ABCDEFG的PIN1–15口。 有了外部信号小蝌蚪的输入,这时就要配置对于这个信号的筛选和处理,符合标准的小蝌蚪才能往下走,这个标准包括什么样的小蝌蚪(触发选择)、是否接收小蝌蚪(是否屏蔽),这也就是过程4,继续往下走,由于中断控制器要接收和处理来自各地的通过筛选的小蝌蚪,所以系统中断控制器要对外部中断进行设置,包括是否允许中断、中断优先级等,也就是决定哪个小蝌蚪可以用、那么多小蝌蚪该先用谁。这就是过程5。 小蝌蚪经历重重险阻,让单片机知道了它的到来,然后就是中断处理程序,处理内容因蝌蚪而异,但是不要忘记最后清除一下这个小蝌蚪对应的中断挂起位,表示这个小蝌蚪已经被处理过了,这就是过程6。 这时小蝌蚪的使命也完成了,整个外部中断的过程就结束了。 |
|
|
|
只有小组成员才能发言,加入小组>>
2562 浏览 0 评论
1159浏览 2评论
762浏览 1评论
515浏览 0评论
272浏览 0评论
453浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 14:53 , Processed in 1.496358 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号