7.4 1周2——按键控制LED_中断方法

1周2:按键控制LED_中断方法

代码及注释:

void Key_Init(void)

{

// 使能AFIO时钟,它允许将一个引脚配置为多个不同的功能(触发中断)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE) ;     

// 使能GPIO时钟

RCC->APB2ENR |= RCC_APB2Periph_GPIOA ;

   //需要GPIO,NVIC,EXTI结构体来初始化  

 GPIO_InitTypeDef G//配置引脚工作模式

     NVIC_InitTypeDef N;//配置优先级

     EXTI_InitTypeDef E;  //配置引脚中断方式

  

   //KEY_1_PA0  高电平有效  先设置KEY1的三个结构体

 //①配置GPIO的结构体(3个成员)  

G.GPIO_Pin = GPIO_Pin_0;

     G.GPIO_Mode = GPIO_Mode_IPD ;(因为是高电平有效,所以应该让它闲时保持低电平,IPD(Down))

     G.GPIO_Speed = GPIO_Speed_10MHz;

   GPIO_Init(GPIOA,&G);

//②配置EXTI的结构体(4个成员)

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);

//将GPIOA端口的引脚0配置为外部中断的输入线路。这样,当该引脚上的外部事件(例如按键按下或传感器信号变化)触发时,可以生成一个对应的中断请求,并执行相应的中断处理程序。    

E.EXTI_Line = EXTI_Line0;

//因为KEY键在PA0,所以选line0

     E.EXTI_Mode= EXTI_Mode_Interrupt;

//选择中断的方式

     E.EXTI_Trigger = EXTI_Trigger_Rising;

//由于KEY1是高电平有效,所以设置成上升沿

     E.EXTI_LineCmd = ENABLE;

     EXTI_Init(&EXTI_InitStruct);

//③配置NVIC的结构体(4个成员)

N.NVIC_IRQChannel = EXTI0_IRQn;

 //指定外部中断引脚0对应的中断通道

     N.NVIC_IRQChannelPreemptionPriority = 1;

//设置抢占优先级

   N.NVIC_IRQChannelSubPriority = 0;

//设置子优先级

     N.NVIC_IRQChannelCmd = ENABLE;

//给中断通道使能

     NVIC_Init(&NVIC_InitStruct);

KEY_2_#PA1 和  KEY_3_#PA4 低电平有效

代码忽略了,和上面差不多

}

//接下来要编写中断处理的函数了

Ps:函数名是不能变的,不过可以另外#define其他名字

这是KEY1的

void EXTI0_IRQHANDLER(void)

{

if (EXTI->PR & GPIO_Pin_0)

//检查外部中断引脚0上的中断标志是否为1,即检查是否发生了中断事件。

    {

        // 在这里添加你的中断处理代码
               LED_BLUE_TOGGLE;
               EXTI->PR |=GPIO_Pin_0;

       //将引脚0上的中断标志位清除
    }
}

KEY2和KEY3同理,代码就忽略了;

这样就能通过按键来实现LED的变化了。

Ps:mmp其实中断我昨晚就学会了,今天早上本来想整理知识点出来,后面想着干脆把串口通信一口气学了,结果整到晚上才想明白,真烧CPU。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值