STM32F0(3)EXTI 外部中断配置
扫描二维码
随时随地手机看文章
// 引脚 PA0 的外部中断配置
void Key_GPIO_Init(void)
{
// 设置 PA0 口为上拉输入模式
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // 打开该引脚的GPIO时钟
GPIOA->MODER &= ~GPIO_MODER_MODER0_1; // 设置为输入模式
GPIOA->MODER &= ~GPIO_MODER_MODER0_0;
GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR0_1; //上拉 == 相当于设置初始电平为 1
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR0_0; // 如果设置为下拉的话,初始电平为 0
// 设置 PA0 外部中断的响应方式 -- 上升沿 和 下降沿 触发
EXTI->IMR |= EXTI_IMR_MR0; // 外部中断线开关
EXTI->EMR |= EXTI_EMR_MR0; // 外部中断事件开关
EXTI->FTSR |= EXTI_FTSR_TR0; // 下降沿触发
EXTI->RTSR |= EXTI_RTSR_TR0; // 上升沿触发
// 开外部中断及优先级配置
// 优先级数值为 0x000000c0 (越大优先级越低) -- 每个优先级占8位
NVIC->IP[EXTI0_1_IRQn / 4] |= (0x000000c0 << (8 * (EXTI0_1_IRQn % 4))); // 设置优先级
NVIC->ISER[0] |= (1 << EXTI0_1_IRQn); // 打开外部中断
}
// 中断处理函数
void EXTI0_1_IRQHandler(void)
{
EXTI->PR |= EXTI_PR_PR0; 需要手动清除标志位
if(根据当前引脚的当前状态来判断该引脚是上升沿 或 下降沿 产生的中断)
//
}