STM32f429外部中断配置解析基于HAL库
1.## 使能IO口时钟
单片机的外部中断0-15与输入输出引脚相连,使用外部中断时需要使能对应的IO口时钟。
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
__HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟
__HAL_RCC_GPIOH_CLK_ENABLE(); //开启GPIOH时钟
2.## 初始化IO口
复位时IO口默认为浮空输入模式,当选择模式为上升沿、下降沿、双边沿触发时会将系统配置寄存器 SYSCFG_EXTICRx寄存器相应位置一,即选择外部中断x的输入源是此I/O口。因为这里用到了系统配置寄存器SYSCFG应该开启SYSCFG时钟,但在调用函数 HAL_GPIO_Init 时如果判断出IO引脚的MODE值设置为上述三种模式就会开启SYSCFG时钟。
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
((MODE) == GPIO_MODE_AF_PP) ||\
((MODE) == GPIO_MODE_AF_OD) ||\
((MODE) == GPIO_MODE_IT_RISING) ||\
((MODE) == GPIO_MODE_IT_FALLING) ||\
((MODE) == GPIO_MODE_IT_RISING_FALLING) ||\
((MODE) == GPIO_MODE_EVT_RISING) ||\
((MODE) == GPIO_MODE_EVT_FALLING) ||\
((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\
((MODE) == GPIO_MODE_ANALOG))
对于下降沿触发,当中断产生时会输入一个低电平所以应选择上拉输入,即中断未发生时此引脚应是高电平状态;反之对于上升沿触发的外部中断应选择下拉输入;双边沿的话选择无上下拉模式;
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin=GPIO_PIN_0; //PA0
GPIO_Initure.Mode=GPIO_MODE_IT_RISING; //上升沿触发
GPIO_Initure.Pull=GPIO_PULLDOWN; //下拉
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_13;