基于HAL库的LED流水灯

本文详细介绍了使用STM32CubeMX搭建工程,通过GPIO控制LED流水灯闪烁和外部中断实现LED亮灭,以及如何在逻辑分析仪下观察时序波形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现LED流水灯

1.STM32CubeMX工程搭建

利用GPIOA 2端口、GPIOB 0端口、GPIOC 13端口轮流闪烁实现LED流水灯
  1. 打开STM32CubeMX,点击File>new project创建新工程,芯片选型stm32f103c8t6
    在这里插入图片描述
    在这里插入图片描述
    双击进入。

  2. 点击system core>gpio 配置
    在这里插入图片描述
    将PA2、PB0、PC13设为GPIO_output模式,如下图:
    在这里插入图片描述

  3. 配置时钟

  • 点击RCC中的High Speed Clock 设置为Crystal/Ceramic Resonator
    在这里插入图片描述
  • 点击上方的Clock Configuration完成配置如下图:
    在这里插入图片描述
  1. 点击SYS,Debug设置为Serinal Wrie
    在这里插入图片描述

  2. 上方Project Manager配置工程
    在这里插入图片描述

  • 工程命名
  • 地址选址(不可包含中文地址,可能打不开keil文件)
  • 选择所用IDE
  1. 单击GENERATE COOE生成项目。

2.代码分析

在生成项目路径中找到MDK-ARM文件夹,打开.uvprojx文件。
在这里插入图片描述
置高电平

 HAL_GPIO_WritePin(GPIOX,GPIO_PIN_x,GPIO_PIN_SET);

置低电平

HAL_GPIO_WritePin(GPIOX,GPIO_PIN_x,GPIO_PIN_RESET);

main.c中函数已经配置好,找到main函数中while(1),编写我们的代码

 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
	  HAL_Delay(500);
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
	  HAL_Delay(500);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
	  HAL_Delay(500);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
	  HAL_Delay(500);
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
	  HAL_Delay(500);
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
	  HAL_Delay(500);

运行生成.hex文件,烧录之。

3.硬件展示

在这里插入图片描述

二、外部中断控制LED亮灭

1.STM32CubeMX工程配置

  1. 在前面配置的基础上增加PA5作为中断口,GPIO选为GPIO_EXTI5
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述输出模式选下降沿触发外部中断,上拉电阻。
  • GPIO mode:
上升沿触发检测的外部中断模式(External Interrupt Mode with Rising edge trigger detection)
下降沿触发检测的外部中断模式(External Interrupt Mode with Falling edge trigger detectiort)
上升/下降沿触发检测的外部中断模式(External Interrupt Mode with Risinq/Falling edge trigger detection)
上升沿触发检测的外部事件模式(External Event Mode with Rising edge trigger detection)
下降沿触发检测的外部事件模式(External Event Mode with Falling edge trigger detection)
上升/下降沿触发检测的外部事件模式(External Event Mode with Rising/Falling edge trigger detectiont)
  1. 左侧NVIC,打开EXTI中的line[9:5] interrupt
    在这里插入图片描述
    或者GPIO中的NVIC也可设置
    在这里插入图片描述
  2. 配置工程中勾选图中选项,GENERATE COOE。
    在这里插入图片描述

2.代码部分

生成代码以后,进入程序;
1.首先,我们在左边stm32f1xx_it.c 里面找到中断处理函数;
在这里插入图片描述
2. 按F12跳转到此函数往下滑找到
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)函数
可以将所有操作都写在中断回调函数里面,代码如下:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_5)
	{
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==GPIO_PIN_RESET)//获取PA5电位
		{
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
			while(1)
			{
				if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==GPIO_PIN_SET)
					break;
			}
		}
	}
}

3.硬件展示

在这里插入图片描述

三、仿真逻辑分析仪观察管脚的时序波形

在这里插入图片描述
在这里插入图片描述
周期正好为1秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dylan_hs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值