首页 > 其他分享 >2025年第16届蓝桥杯嵌入式竞赛学习笔记(二):点亮LED

2025年第16届蓝桥杯嵌入式竞赛学习笔记(二):点亮LED

时间:2025-01-04 22:01:25浏览次数:9  
标签:LED Pin PIN 16 selected 蓝桥 uint16 GPIO define

1.新建工程

使用第一章配好的STM32CubeMX和Keil5

2.查看数据书册及图形化配置

打开CT117E-M4产品手册

查看LED灯的原理图

LED的引脚为PC8-PC15,引脚为低电平时LED点亮

U1为锁存器,锁存器的使能端PD2为高电平时,LED灯才会被点亮

正确点灯步骤:

①先PD2输出高电平

②PC8-PC15输出低电平

③PD2输出低电平

图形化配置,将PC8-PC15,PD2均设为输出模式

单击要配置的引脚,选择GPIO_Output

将引脚配置完成后,进入GPIO设置界面,将引脚初始模式全部设为高电平

点击导航栏右侧 GENERATE CODE 生成项目

3.代码部分

先将比赛中可能用到的头文件整合到一个.h文件中,我这里命名为headfile.h

#ifndef _HEADFILE_
#define _HEADFILE_

#include "stm32g4xx.h"
#include "stdio.h"
#include "string.h"
#include "stdint.h"
#include "main.h"
#include "gpio.h"



#endif

点开魔法棒,选择C/C++,点击Include Paths栏最后的三个点,选择headfile.h的路径

新建led.c文件

#include "headfile.h"

void led_show(uint8_t led,uint8_t mode)
{
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	
	if(mode)
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 << (led - 0x01),GPIO_PIN_RESET);
	else
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 << (led - 0x01),GPIO_PIN_SET);
	
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

该函数首先将PD2拉高

判断mode,mode为1时将传过来的引脚号置低电平也就是点亮LED。为0时置高电平,也就是熄灭LED

因为在HAL库中GPIO引脚顺序是按二进制排序的,哪位为1即是哪个引脚

#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */

所以我们只需传个参数,让GPIO_PIN_8相应左移即可

完成操作后再将PD2置低电平

led.h文件内容如下,并将此文件在headfile.h中引用一下:#include "led.h"

#ifndef _LED_H_
#define _LED_H_

#include "stm32g4xx.h"

void led_show(uint8_t led_pin,uint8_t mode);

#endif

在.h文件中需声明一下.c中创建函数才可使用

在main.c中引用头文件#include "headfile.h"

编辑main函数

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		led_show(1,1);
		led_show(4,1);
		led_show(8,1);
    /* USER CODE END WHILE */

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

4.编译并烧录

点击导航栏的全部编译,输出窗口显示0错误

将烧录线一端连接至电脑的USB口,另一端连接至开发板的Download下载口

连好之后点击烧录按钮

烧录完成后发现开发板上第1、4、8的LED灯亮起

标签:LED,Pin,PIN,16,selected,蓝桥,uint16,GPIO,define
From: https://blog.csdn.net/qq_62350698/article/details/144935273

相关文章

  • 【无人机协同】遗传算法GA同构异构无人机UAV协同搜索【含Matlab源码 10916期】
    ......
  • 16. 进度条控件
    一、进度条控件  进度条控件控件主要显示任务的执行进度,PySide6中提供了进度条控件(QProgressBar)。进度条控件通常在执行长时间任务时,用进度条告诉用户当前的进展情况。  我们可以在终端中使用pip安装pyside6模块。pipinstallpyside6  用QProgressBar类创建实......
  • STM_32 按键点亮LED
    端口设置//LED的引脚设置//定义一个结构体GPIO_InitTypeDefGPIO5_InitStruct;//打开引脚的使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO5_InitStruct.GPIO_Pin=GPIO_Pin_5;GPIO5_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO5_InitStruct.GPIO_Sp......
  • Read-only file system detection thread was hung. Cell was power cycled to stop t
    1、故障描述今天下午,cell10存储节点莫名其妙地自动重启了。虽然数据库没有受到影响,但仍然需要弄清楚重启的原因。以下记录整个故障的分析过程。2、故障分析2.1分析操作系统日志。故障前后的操作系统日志摘要如下所示。Jan 409:25:29dm01celadm10auditd[12291]:Audit......
  • 12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)
    软件介绍12306Bypass分流抢票软件,易操作强大的12306抢票软件,全程自动抢票,云识别验证码打码,多线程秒单、稳定捡漏,支持抢候补票、抢到票自动付款,支持多天、多车次、多席别、多乘客、短信提醒等功能。1、Bypass分流抢票本身附带云识别模块帮助识别,但实际测试即便是不使用也不需要......
  • ybt1678 独木桥
    1678:独木桥时间限制:1500ms内存限制:131072KB【题目描述】Alice和Bob是好朋友,有一天他们带了\(n\)个孩子过独木桥。为了方便,我们将问题抽象如下:将独木桥看成一个长度无限长的实数轴,将每个孩子看作数轴上的一个实数点。数轴从左到右坐标不断增大。孩子的位置用......
  • 中国人工智能开源软件发展白皮书 | 166页PDF免费下载
    《中国人工智能开源软件发展白皮书》是一份详尽的报告,旨在梳理和分析中国人工智能开源软件的发展现状和生态。这份白皮书由中国人工智能开源软件发展联盟编写,涵盖了以下几个主要方面:人工智能开源软件发展现状:白皮书对人工智能领域的开源软件进行了全面的分析,包括各种软......
  • 两个int值,分别对应一个16进制字节高四位和低四位时的转换方法。
    例如:inta=1;intb=2;想要把他们转换成一个16进制QByteArray0x12分别对应高四位和低四位。使用以下方法:inta=1;intb=2;QByteArrayarray=QByteArray(1,(char)((a&0xFF)<<4|(b&0xFF)));原理:a=1&0xFF转换成二进制就是00000001&11111111,每一......
  • 第十三届蓝桥杯省赛研究生组python
    目录试题A:工作时长excel处理代码试题B:分糖果试题C:填充试题D:互质数的个数题解:暴力试题E:阶乘的和题解:暴力+备忘录试题F:公因数匹配题解:暴力试题A:工作时长excel处理把数据复制到excel,并选中列右键选择设置单元格格式注意:因为求和之后总小时数可能会超过24小时,不要选择最前面是hh......
  • LeetCode169.多数元素
    题目:给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数大于[n/2]的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入:nums=[3,2,3]输出:3示例2:输入:nums=[2,2,1,1,1,2,2]输出:2思路:哈希法遍历数组,通过map统计数量,k......