STM32CubeIDE开发笔记 MK.I - 点亮 LED / RGB-LED 灯

前言

更新日志

版本:2022.03.07 Ver1.0.0
版本:2022.03.08 Ver1.1.0 追加RGB版本

简介

一般而言,作为最基础部分,核心板或者开发板上都会有LED灯。
在STM32学习的一开始,让我们来尝试点亮一个LED灯。
博主使用的是自研制的STM32L431RCT6试作型板。
LED灯部分为RGB灯,与单色LED原理基本相同。

请添加图片描述

查看原理图

首先需要查看核心板或开发板上LED部分的原理图:
(参考手册、用户手册、datasheet、原理图这些是真的必不可少)在这里插入图片描述
在这里插入图片描述
例如,博主这里的是共阳极(一般都是如此,拉高/低一侧电平)。
当LED1/2/3(对应引脚)处于低电平状态(数字信号0)时,LED灯会导通发光;
当LED1/2/3(对应引脚)处于高电平状态(数字信号1)时,LED灯会截止熄灭。

CubeMX的配置

找到板子上LED对应的端口 右键 并 选择 GPIO_Output一项,即设置该引脚端口为GPIO输出模式。
在这里插入图片描述
GPIO里可以设置相应Label进行对相应引脚名称替换(推荐做这步)。
在这里插入图片描述
配置 外部晶振 、下载方式 与 时钟
具体参考STM32集成开发环境 STM32CubeIDE 安装与配置指南

生成代码

主代码

打开main.c
下面这步是我偷懒办法
我们来define一下相应的GPIO操作

注意此步需添加在 ↓ 之间,否则更新CubeMX的时候区域外的内容会被刷新丢失掉

/ * USER CODE BEGIN PD * /
/ * USER CODE END PD * /

↓该语句对应为对label为LED1的端口输出RESET(低电平,数字信号0)

HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET)

这一语句已经实现了点亮LED的操作
SET相应的就是高电平,数字信号1

//LED1 SETTING
#define LED1_ON  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET)
#define LED1_OFF HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET)

在这里插入图片描述
在while中,添加LED代码
注意此步需添加在 ↓ 之间,否则更新CubeMX的时候区域外的内容会被刷新丢失掉

/ * USER CODE BEGIN 3 * /
/ * USER CODE END 3 * /

刷新一下发现自己辛辛苦苦写的一大串啪的一下就消失了是多么惨痛的体验

	LED1_ON;
    HAL_Delay(1500);
    LED1_OFF;
    HAL_Delay(1500);

在这里插入图片描述

构建Debug与调试

代码编写完毕后,开始构建Debug
在这里插入图片描述
在这里插入图片描述
待到构建完成后,连接ST-LINK(可能会显示更新ST-LINK驱动,显示DFU-MODE、RESTART等字样时,拔插一遍ST-LINK即可进行upgrade)
在这里插入图片描述
基本保持默认设置即可
这里需要注意的是,使用ST-LINK的话,选择调试配置 > 调试器ST-LINK(ST-LINK GDB server)(这里可能会弹出需要安装下这个GDB server)和SWD
在这里插入图片描述
然后再次点击Debug图标
显示下载成功
在这里插入图片描述

演示

复位(RESET)即可
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

RGB版本

首先参考
STM32CubeIDE开发笔记 MK.II - ST-LINK调试 与 外部驱动库的建立
建立相应 头文件 和 源文件

参照DataSheet 找到RGB对应脚
博主这边 1对应R 2对应G 3对应B
在这里插入图片描述
在CubeMX做相应修改
在这里插入图片描述

添加 RGB_LED.h RGB_LED.c

RGB_LED.h

/*
 * RGB_LED.h
 *
 *  Created on: Mar 8, 2022
 *      Author: KeeganKei
 */
#ifndef INC_RGB_LED_H_
#define INC_RGB_LED_H_

//RGB-LED setting
void RGB_LED_SET(uint16_t L_RGB);

#endif /* INC_RGB_LED_H_ */

RGB_LED.c

/*
 * RGB_LED.c
 *
 *  Created on: Mar 8, 2022
 *      Author: KeeganKei
 */
#include <stdio.h>        //uint8_t   import
#include <main.h>         //GPIO_Port import

//LED_R setting
#define LED_R_ON  HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_RESET)
#define LED_R_OFF HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET)
//LED_G setting
#define LED_G_ON  HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_RESET)
#define LED_G_OFF HAL_GPIO_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_SET)
//LED_B setting
#define LED_B_ON  HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_RESET)
#define LED_B_OFF HAL_GPIO_WritePin(LED_B_GPIO_Port,LED_B_Pin,GPIO_PIN_SET)

void RGB_LED_SET(uint16_t L_RGB)
{
	switch(L_RGB)
	{
	case 000:
	    {
		    LED_R_OFF;
	    	LED_G_OFF;
		    LED_B_OFF;
		    break;
	    }
	case 001:
		{
			LED_R_OFF;
			LED_G_OFF;
			LED_B_ON;
			break;
		}
	case 010:
	    {
		    LED_R_OFF;
	    	LED_G_ON;
		    LED_B_OFF;
		    break;
	    }
	case 011:
		{
			LED_R_OFF;
			LED_G_ON;
			LED_B_ON;
			break;
		}
	case 100:
	    {
		    LED_R_ON;
	    	LED_G_OFF;
		    LED_B_OFF;
		    break;
	    }
	case 101:
		{
			LED_R_ON;
			LED_G_OFF;
			LED_B_ON;
			break;
		}
	case 110:
	    {
		    LED_R_ON;
	    	LED_G_ON;
		    LED_B_OFF;
		    break;
	    }
	case 111:
		{
			LED_R_ON;
			LED_G_ON;
			LED_B_ON;
			break;
		}
	default:
	    {
	    	LED_R_OFF;
	    	LED_G_OFF;
	    	LED_B_OFF;
	    	break;
        }
	}

}

在main.c添加 include 和 LED代码
在这里插入图片描述
在这里插入图片描述

后记

emmmmmm 这次似乎没什么好说的
我们 MK.II 见 (つ´ω`)つ
追加了一个RGB版本
RGB灯比单色好看多了 ┐(๑¯∀¯๑)┌

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值