STM32入门学习笔记之中断架构(下)

电子说

1.3w人已加入

描述

(4) 外部中断配置寄存器1 :EXTIXR1

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI3[3:0] EXTI2[3:0] EXTI1[3:0] EXTI0[3:0]

EXTIx[3:0]:EXTIx配置(x = 0~3)

0000:PA[x]引脚 0100:PE[x]引脚 0001:PB[x]引脚 0101:PF[x]引脚

0010:PC[x]引脚 0110:PG[x]引脚 0011:PD[x]引脚

(5) 外部中断配置寄存器2 :EXTIXR2

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI7[3:0] EXTI6[3:0] EXTI5[3:0] EXTI4[3:0]

EXTIx[3:0]:EXTIx配置(x = 4~7)

0000:PA[x]引脚

0100:PE[x]引脚

0001:PB[x]引脚

0101:PF[x]引脚

0010:PC[x]引脚

0110:PG[x]引脚

0011:PD[x]引脚

(6) 外部中断配置寄存器3 :EXTIXR3

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI11[3:0] EXTI10[3:0] EXTI9[3:0] EXTI8[3:0]

EXTIx[3:0]:EXTIx配置(x = 8~11)

0000:PA[x]引脚

0100:PE[x]引脚

0001:PB[x]引脚

0101:PF[x]引脚

0010:PC[x]引脚

0110:PG[x]引脚

0011:PD[x]引脚

(7) 外部中断配置寄存器4 :EXTIXR4

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI15[3:0] EXTI14[3:0] EXTI13[3:0] EXTI12[3:0]

EXTIx[3:0]:EXTIx配置(x = 12~15)

0000:PA[x]引脚

0100:PE[x]引脚

0001:PB[x]引脚

0101:PF[x]引脚

0010:PC[x]引脚

0110:PG[x]引脚

0011:PD[x]引脚

(8) APB2外设时钟使能寄存器 :APB2ENR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- USART1EN - SPI1EN TIM1EN ADC2EN ADC1EN - IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN - AFIOEN

Bit 14:USART1时钟使能(写1开启,写0关闭)

Bit 12:SPI1时钟使能(写1开启,写0关闭)

Bit 11:TIM1时钟使能(写1开启,写0关闭)

Bit 10:ADC2时钟使能(写1开启,写0关闭)

Bit 9:ADC1时钟使能(写1开启,写0关闭)

Bit 6:GPIOE时钟使能(写1开启,写0关闭)

Bit 5:GPIOD时钟使能(写1开启,写0关闭)

Bit 4:GPIOC时钟使能(写1开启,写0关闭)

Bit 3:GPIOB时钟使能(写1开启,写0关闭)

Bit 2:GPIOA时钟使能(写1开启,写0关闭)

Bit 0:辅助功能IO时钟使能(写1开启,写0关闭)

3.3.3 外部中断配置函数

/***************************************************
Name    :EXIT_Config
Function  :外部中断配置
Parameter  :
      GPIOx:0~6,代表GPIOA~G
      BITx:需要使能的位 
      TRIM:触发模式
        1:下升沿
        2:上降沿
        3:任意电平触发
Return    :None
***************************************************/
void EXIT_Config( u8 GPIOx, u8 BITx, u8 TRIM )
{
  u8 EXTADDR ;
  u8 EXTOFFSET ;
  EXTADDR = BITx/4 ;                      //得到中断寄存器组的编号
  EXTOFFSET = ( BITx%4 )*4 ;
  RCC->APB2ENR |= 0x01 ;                    //使能io复用时钟       
  AFIO->EXTICR[ EXTADDR ] &= ~( 0x000F<<EXTOFFSET );      //清除原来设置
  AFIO->EXTICR[ EXTADDR ] |= GPIOx<<EXTOFFSET ;        //EXTI.BITx映射到GPIOx.BITx
  EXTI->IMR |= 1<<BITx ;                    //开启line BITx上的中断
   if( TRIM&0x01 )  EXTI->FTSR |= 1<<BITx ;            //下降沿触发
  if( TRIM&0x02 )  EXTI->RTSR |= 1<<BITx ;            //上升降沿触发
}

3.4 其他文件的添加

3.4.1 寄存器定义文件

(1)添加用到的NVIC寄存器组和EXTI寄存器组的定义。

STM32

(2)定义寄存器组地址

STM32

3.4.2 sys.h文件

STM32

上图就是添加子函数声明,为了用于其他文件调用。

3.4.3 sys.c文件

(1)在STM32时钟配置函数之前增加复位时钟和中断的功能,最终函数如下图所示。

STM32

(2)添加刚才的两个子函数

STM32

STM32

至此,sys文件里面最基础的函数就全部添加完毕了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分