STM32F407 学习笔记四(EXTI)


#include <stm32f4xx.h>


void Led_Init(void);
void main()
{
  RCC->AHB1ENR |= 0X00000009;    //enable GPIOA GPIOD
  RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;   //enable System Configure
  
  SCB->AIRCR = 0x05FA0000|0x400;  //中断优先级分组 抢占:响应 3:1
  
  Led_Init();
  
  GPIOA->MODER &= 0XFFFFFFFC; //浮空输入
  GPIOA->PUPDR &= 0XFFFFFFFC; //无上拉下拉
  
  EXTI->IMR |= (1<<0); //不屏蔽中断线0
  EXTI->FTSR |= (1<<0);  //下降沿触发
  
  SYSCFG->EXTICR[1] &= 0XFFFFFF00;  //配置外中断线0到PA口
  NVIC->IP[6] = 0XE0;      //1110, 最高抢占优先级,最低响应优先级
  NVIC->ICER[0] |= (1<<6);  //中断使能
  
  while(1)
  {};  
  
}


void Led_Init()
{
   GPIOD->MODER &= 0X00FFFFFF;
   GPIOD->MODER |= 0X55000000;
   
   GPIOD->OTYPER &= 0XFFFF0FFF;
   
   GPIOD->OSPEEDR &= 0X00FFFFFF;
   GPIOD->OSPEEDR |= 0XFF000000;
   
   GPIOD->PUPDR &= 0X00FFFFFF;
   GPIOD->BSRRH = 0XF000;
   
   SYSCFG->CMPCR =0X00000001;  //速度超过50M,要开启补偿
}


void EXTI0_IRQHandler(void)
{
    uint32_t tmp;
    if((EXTI->PR & 0X00000001)!=0)  //检测是哪个中断挂起
    {
      tmp=(~GPIOD->ODR) & 0X0000F000;
      GPIOD->ODR &= 0XFFF0FFF;
      GPIOD->ODR |= tmp;
      
      EXTI->PR = 1<<0;  //解除中断挂起
    }
    
}


EXTI寄存器:








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值