当前位置:首页 > 单片机 > 单片机
[导读]// 引脚 PA0 的外部中断配置void Key_GPIO_Init(void){// 设置 PA0 口为上拉输入模式RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // 打开该引脚的GPIO时钟GPIOA->MODER &= ~GPIO_MODER_MODER0_1; // 设置为输入模式GPIOA->M

// 引脚 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(根据当前引脚的当前状态来判断该引脚是上升沿 或 下降沿 产生的中断)

//

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭