外部中断的设置和一些寄存器的介绍_第1页
外部中断的设置和一些寄存器的介绍_第2页
外部中断的设置和一些寄存器的介绍_第3页
外部中断的设置和一些寄存器的介绍_第4页
外部中断的设置和一些寄存器的介绍_第5页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1) 初始化10 口为输入。外部中断输入的IO 口的状态,可以设置为上拉 /下拉输入,|也可以设置为浮空输入, 但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。 在干扰较大的地方,就算使用了上拉 /下拉,也建议使用外部上拉 /下拉电阻,这样可以一定程度防止 外部干扰带来的影响。 使能IO 口的时钟 清除原来的相应的设置 设置成上拉输入 0x80 把GPIO_OD相应的位设置成 12) 开启10 口复用时钟,设置10 口与中断线的映射关系。STM32的10 口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,这样我们要先开启复用时钟,然后配置IO 口与中断线的对应

2、关系。才能把外部中断与中断线连接起来。 使能复用时钟RCC_APB1EN第 0 位 AFIOEN 辅助功能 IO 时钟使能 RCC-APB1ENR |= 1EXTICR0&=(0x000FEXTICR0|=00;/设置引脚为0000也就是A 口位 6:4PORT2:0:端口选择 000 :选择 PA 001 :选择 PB 010 :选择 PC 011 :选择 pD 100:选择 PE位3:0 PIN3:0:引脚选择(x=AE)0000 :选择 Px0 0001 :选择 Px1 0010:选择 Px2 0011:选择 Px3 0100:选择 Px40101:选择 Px5 0110: 选择 Px6

3、 0111 :选择 Px7 1000:选择 Px8 1001 :选择 两1010:选择 Px10 1011 :选择 Px11 1100:选择 Px12 1101 :选择 Px13 1110:选择 Px14 1111:选择 Px153) 开启与该10 口相对的线上中断/事件,设置触发条件我们要配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置,同时要开启中断线上的中断。这里需要注意的是:如果使用外部中断,并设置该中断的EMR,软件位EMREMR、位的话,会引起软件仿真不能跳到中断,而硬件上是可以

4、的。而不设置 仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置配置中断屏蔽寄存器(EXTI_IMR)的相应中断线设置成 13302928272625242322212019L317161怩稱MR IBMR 17勺R怡1rwr*|WIF15H13121109S7643210iJRlSMH14MK13MEillMKIO MRyMH?K4MK41 MJMRMRO 1P 31:20怩阳,也须始终持沟址位状态WhMR K-I:的屮断 HF 厳I nlemi pl Mask on line x)D 屏上的中1:开械來(4维T上的中斯请求,洋=位伯U适用于昨.联生产吕.时于其它产品为保丽*Cr

5、w C rff rw c rwr 常ru rw rw nv rw rw ov被设置成1也就是开放来自线上的中断请求。设置触发方式。上 升沿 触发选 择寄存 器(EXTI_RTSR)下降沿 触发选择寄存器 (EXTI_FTSR)直接在相应的触发方式写1就行了。扩展:事件屏蔽寄存器|(EXTI_EMR)使用如图上面中断屏蔽寄存器软件中断事件寄存器|(EXTI_SWIER) SWIERx:线x上的软件中断 位18:0当该位为0时, 写1 将设置EXTI_PR中相应的挂起位。 如果在EXTI_IMR和EXTI_EMR中允许产生该中断, 则此时将产生一个中断。位 18:0注:通过清除EXTI_PR的对应

6、位(写入1),可以清除该位为0 挂起寄存器 |(EXTI_PR)PRx:挂起位(Pending bit)0:没有发生触发请求1在该位中写入1可以清除它,1:发生了选择的触发请求 当在外部中断线上发生了选择的边沿事件,该位被置 也可以通过改变边沿检测的极性清除。4) 配置中断分组(NVIC),并使能中断配置中断的分组,以及使能,对STM32的中断来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。”设置NVIC/NVIC Preemp tio nP riority:抢占优先级/NVIC Sub Priority响应优先级yNVIC_Channel:中断编号yN

7、VIC_Group:中断分组 04y注意优先级不能超过设定的组的范围!否则会有意想不到的错误/组划分:/组0:0组1:1组2:2组3:3位抢占优先级,4位响应优先级 位抢占优先级,3位响应优先级 位抢占优先级,2位响应优先级 位抢占优先级,1位响应优先级/组4:4位抢占优先级,0位响应优先级/NVIC_SubPriority 和 NVIC_PreemptionPriority的原则是,数值越小,越优先void MY_NVIC_I ni t(u8 NVIC_ Preemp tio nP riority,u8 NVIC_Sub Priority,u8NVIC Cha nn el,u8 NVIC G

8、ro up)u32 temp;u8 IPRADDR=NVIC_Channel/4; /每组只能存 4个,得到组地址u8 IPROFFSET=NVIC_Channel%4;/ 在组内的偏移IP ROFFSET= IP ROFFSET*8+4; /得至U偏移的确切位置MY_NVIC_ PriorityGrou pCon fig(NVIC_Grou p);/设置分组temp=NVIC_ Preem ptio nP riorityNVIC_Grou p);temp&=0xf;/ 取低四位if(NVIC ChannelISER0|=1ISER1|=1IPRIPRADDR|=temp1PROFFSET;/

9、设置响应优先级和抢断优先级关于终端分组的介绍请参考中断分组 。5) 编写中断服务函数中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断, 但是没编写中断服务函数, 就可能引起硬件错误, 从而导致程序崩溃! 所以在开启了某个中 断后,一定要记得为该中断编写服务函数。在中断服务函数里面编写你要执行的中断后的操 作。这里要强调的是,在中断函数里要注意一下几点:是否需要清除中断标志,这个在中断挂起里面相应位写1即可。在中断函数里尽量不要写太多的代码,应该使其快速的完成。中断处理函数名是固定的,别写错了。例如:void EXTI4_IRQHa ndler(void)格式一般为 vo

10、id X_IRQHa ndler(void).#define WWDG IRQChanne而在系统中对应的中段号也要一一对应。Window WatchDog In terru pt(u8)0x00) /* */(u8)0x01) /* PVD through EXTI Line#define P VD_IRQCha nnel detection In terrupt */#define TAMPER_IRQChannel #defi ne RTC_IRQCha nnel #define FLASH IRQCha nnel(u8)0x02) /* Tamper In terru pt */(u8

11、)0x03) /* RTC global In terru pt */#defi ne RCC IRQCha nnel#defi ne EXTI0_IRQCha nnel #defi ne EXTI1_IRQCha nnel #defi ne EXTI2_IRQCha nnel #defi ne EXTI3_IRQCha nnel#defi ne EXTI4 IRQCha nnel(u8)0x05) /* RCC global In terru pt */ (u8)0x06) /* EXTI Line0 Interrupt */ (u8)0x07) /* EXTI Linel In terru

12、 pt */ (u8)0x08) /* EXTI Line2 In terru pt */ (u8)0x09) /* EXTI Li ne3 In terru pt */ (u8)0x0A) /* EXTI Line4 Interrupt */(u8)0x04) /*FLASHglobal In terru pt*/#define DMA1_Cha nn el1_IRQCha nnel (u8)0x0B) /* DMA1 Cha nnel 1 global Interrupt */#define DMA1 Channel2 IRQChannel(u8)0x0C) /* DMA1 Channel

13、 2 global Interrupt */#define DMA1 Cha nn el3 IRQCha nnel (u8)0x0D) /* DMA1 Cha nnel 3 globalInterrupt */#define DMA1_Cha nn el4_IRQCha nnel (u8)0x0E) /* DMA1 Cha nnel 4 globalIn terr upt */#defi ne DMA1_Cha nn el5_IRQCha nnel (u8)0x0F) /* DMA1 Channel 5 global Interrupt */#defi ne DMA1 Cha nn el6 I

14、RQCha nnel (u8)0x10) /* DMA1 Channel 6 globalInterrupt */#define DMA1_Cha nn el7_IRQCha nnel (u8)0x11) /* DMA1 Cha nnel 7 globalInterrupt */(u8)0x12) /* ADC1 et ADC2 global#define ADC1 2 IRQCha nnelInterrupt */#define USB HP CAN TX IRQCha nnel (u8)0x13) /* USB High Priority or CANTX In terru pts */C

15、ha nnel (u8)0x14) /* USB Low Priority or CANRX0 In terru pts */(u8)0x15) /* CAN RX1 In terru pt */(u8)0x16) /* CAN SCE In terru pt */#define CAN RX1 IRQCha nnel#define CAN SCE IRQCha nnel#define EXTI9_5_IRQCha nnelIn terru pts */(u8)0x17)/* ExternalLin e9:5#define TIM1 BRK IRQCha nnel(u8)0x18) /* TI

16、M1 Break In terru pt */#defi ne TIM1_UP_IRQCha nnel(u8)0x19) /* TIM1 Up date In terru pt */#defi neTIM1_TRG_COM_IRQCha nnel(u8)0x1A)/* TIM1 Trigger andCommutati on Interrupt */ (u8)0x1B) /* TIM1 Cap ture Compareefine TIM1_CC_IRQChannel In terrupt */#defi ne TIM2_IRQCha nnel#defi ne TIM3 IRQCha nnel#

17、defi ne TIM4 IRQCha nnel#defi ne I2C1_EV_IRQCha nnel#defi ne I2C1_ER_IRQCha nnel(u8)0x1C) /* TIM2 global In terru pt */(u8)0x1D) /* TIM3 global In terru pt */(u8)0x1E) /* TIM4 global In terru pt */(u8)0x1F) /* I2C1 Event In terru pt */(u8)0x20) /* I2C1 Error In terru pt */#define I2C2_EV_IRQCha nnel

18、 #defi ne I2C2_ER_IRQCha nnel #defi ne SP l1 IRQCha nnel(u8)0x21) /* I2C2 Event In terru pt */(u8)0x22) /* I2C2 Error In terru pt */(u8)0x23) /* SPI1 global In terru pt */#defi ne SP l2 IRQCha nnel(u8)0x24) /* SPI2 global In terru pt */#defi ne USART1 IRQCha nnel(u8)0x25) /* USART1 global In terru p

19、t*/#define USART2 IRQChannel(u8)0x26) /* USART2 global In terru pt*/#define USART3 IRQCha nnel(u8)0x27) /* USART3 global In terru pt*/#defi ne EXTI15 10 IRQCha nnel(u8)0x28) /* External Li ne15:10In terru pts */#define RTCAlarm_IRQCha nnel(u8)0x29) /* RTC Alarm through EXTILine Interrupt */#defi ne

20、USBWakeUp_IRQCha nnel(u8)0x2A) /* USB WakeUp from sus pendthrough EXTI Line In terru pt */#define TIM8 BRK IRQCha nnel(u8)0x2B) /* TIM8 Break In terru pt */#define TIM8_UP_IRQCha nnel(u8)0x2C) /* TIM8 Up date In terru pt */#defineTIM8_TRG_COM_IRQChannel(u8)0x2D)/* TIM8 Trigger andCommutatio n In ter

21、r upt */#defi ne TIM8_CC_IRQCha nnel(u8)0x2E) /* TIM8 Cap ture Com pareInterrupt */#define ADC3_IRQCha nnel(u8)0x2F) /* ADC3 global In terru pt */#define FSMC IRQCha nnel(u8)0x30) /* FSMC global In terru pt */#defi ne SDIO IRQCha nnel(u8)0x31) /* SDIO global In terru pt */#define TIM5_IRQCha nnel(u8)0x32) /* TIM5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论