基于HAL库的LED流水灯(外部中断模式控制亮灭)


一、基于HAL库的LED流水灯

1.利用CubeMX创建项目

1)新建工程在这里插入图片描述
2)选择芯片
在这里插入图片描述3)配置GPIO

引脚配置
1 A4,B9,C15输出控制灯的亮灭,设置为GPIO_Output
2 A1,A7同样设置为GPIO_Output,A1设置为高电平,A7设置为低电平
3 C13作为指示灯,设置为GPIO_Output
4 B5模拟开关,设置为GPIO_EXTI5,中断配置设置成上升沿和下降沿都触发

在这里插入图片描述
User Label设置别名,方便以后调用。

下图为设置触发模式。
设置模式
4)配置SYS
在这里插入图片描述
5)配置RCC
在这里插入图片描述
6)配置NVIC
在这里插入图片描述
7)时钟配置
在这里插入图片描述
8)生成代码
在这里插入图片描述
在这里插入图片描述

2.进入Keil修改代码

1)寻找中断处理函数
在这里插入图片描述
在这里插入图片描述

2)在main.c重写中断处理

代码如下:

uint16_t flag=0;             //声明变量,作为开关标志

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	
   if(GPIO_Pin == GPIO_PIN_5){   //确认中断位置
	   
   GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5);     //获取B5当前电位
	   
   if(pinState==GPIO_PIN_SET)//高电位流水灯亮
   {
 	  flag=1;
   }
   
   else if(pinState==GPIO_PIN_RESET)//低电位流水灯灭
   {
 	  flag=0;
   }
   } 
}

3)流水灯的实现代码

代码如下(替换原while):

while (1)
  {
    if(flag==1){
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4亮灯
  	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9熄灯
  	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15熄灯
  	HAL_Delay(500);//延时0.5s
    }
    else if(flag==0){
      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4熄灯
  	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9熄灯
  	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15熄灯
  	  HAL_Delay(500);//延时0.5s
    }
	 if(flag==1){

  	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4熄灯
  	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9亮灯
  	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15熄灯
  	HAL_Delay(500);//延时0.5s		

    }
    else if(flag==0){
      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4熄灯
  	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9熄灯
  	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15熄灯
  	  HAL_Delay(500);//延时0.5s
    }
	 if(flag==1){
	
  	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4熄灯
  	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9熄灯
  	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15亮灯
  	HAL_Delay(500);//延时0.5s
    }
    else if(flag==0){
      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4熄灯
  	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9熄灯
  	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15熄灯
  	  HAL_Delay(500);//延时0.5s
    }
  }

3.电路连接

在这里插入图片描述

4.效果展示

在这里插入图片描述
黑线接A7,低电平,红线接A1,高电平,棕线接B5,为开关。


接A1,灯亮;接A7,灯灭。

二、观察管脚的时序波形

1.相关配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值