蓝桥杯嵌入式学习笔记(2):LED指示灯程序设计

本文介绍了如何基于STM32平台,利用CubeMX工具配置GPIO引脚,编写代码控制LED灯的亮灭,包括电路原理、源工程配置、代码编写和测试过程。
摘要由CSDN通过智能技术生成

目录

1. 前言

2. 电路原理

3. 使用CubeMX进行源工程的配置

4. 代码编程

5. 测试 

1. 前言

书接上文,上一篇笔记完成了基础源工程的构建,这次我们在上一个工程的基础上做LED指示灯程序设计。

2. 电路原理

通过查阅CT117E-M4产品手册的电路原理图,可以看到LED电路部分需要用到的引脚为PC8、PC9、PC10、PC11、PC12、PC13、PC14、PC15和PD2。

图2-1 LED电路原理图 

 由于发光二极管已经接入了VDD,那么PC8~PC15为低电平时,LED灯将变亮。但是要注意的是LED的一些引脚与我们后面的LCD引脚存在共用,所以需要锁存器来保存LED的电平设置。

图2-2 SN74HC573内部结构图 

OE接地,所以一直是低电平,LE来控制信号通断,当LE为高电平时,信号传输过来;当LE为低电平时则Q端的电平将锁存,不会再改变。所以我们后续编程时,更改PC8~PC15的引脚电平后,去控制PD2引脚高电平后低电平,即可完成LED的控制。 

3. 使用CubeMX进行源工程的配置

打开之前Source工程的.ioc文件,在Pinout View将PC8~PC15、PD2都设置为GPIO_Output

随后在System Core -GPIO设置里将PC8~PC15改为默认为高电平。

这样我们就设置完了,最后点击GENERATE CODE。

4. 代码编程

接下来我们在Test_Project工程里的Src文件夹创建BSP\LED\bsp_led.c,同理,在Inc文件夹创建BSP\LED\bsp_led.h。这就是我们后面要编写的中间层代码文件。

打开Test_Project工程,进行文件Group的添加

将Inc\BSP目录添加到include path里

随后在bsp_led.c中添加bsp_led.h

随后进行编译,即可看到bsp_led.h在Project目录中,编写bsp_led.h

#include "main.h"

void LED_Init(void);
void LED_Disp(unsigned char ucLed);

我们将Source工程里的gpio.c里的初始化部分代码粘贴到LED_Init内,然后实现LED_Disp函数,如下为bsp_led.c程序

#include "led\bsp_led.h"

void LED_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);

  /*Configure GPIO pins : PC13 PC14 PC15 PC8
                           PC9 PC10 PC11 PC12 */
  GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pin : PD2 */
  GPIO_InitStruct.Pin = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

}

//函数名:LED_Disp
//入口参数:ucLed
//出口参数:void
//函数功能:LD8-LD1对应ucLed的8个位
void LED_Disp(unsigned char ucLed)
{
	//**将所有的灯熄灭
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
	
	//根据ucLed的数值点亮相应的灯
	HAL_GPIO_WritePin(GPIOC,ucLed<<8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

随后编写main.c部分进行代码测试

int main(void)
{
	HAL_Init();
	
  SystemClock_Config();
	LED_Init();
  while (1)
  {
    /* USER CODE END WHILE */
		LED_Disp(0x88);
		HAL_Delay(500);
		LED_Disp(0x00);
		HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }
}

5. 测试 

烧录到开发板中看效果

板子的LED灯在闪烁,说明本次功能已成功实现啦🤭!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值