②【蓝桥杯】STM32G4嵌入式竞赛实训平台(CT117E-M4)学习——LED

写在前面——

        本文将介绍嵌入式竞赛实训平台(CT117E-M4)开发板上8个LED灯的使用。

目录

硬件平台

软件平台

LED原理图

配置过程

编写函数


硬件平台

嵌入式竞赛实训平台(CT117E-M4)是北京国信长天科技有限公司设计、生产的一款“蓝桥杯全国软件与信息技术专业人才大赛–嵌入式设计与开发科目”专用竞赛平台,平台STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提供丰富的实验场景

CT117E-M4产片图片

软件平台

        KEIL5,STM32CubeMX 

LED原理图

         

        从原理图中我们可以看出,8盏LED灯通过锁存器74HC573驱动,LED灯的阴极连接在锁存器的输出端,采用低电平的方式点亮。锁存器的输入端连接在GPIO的PC8~PC15上,控制引脚连接在PD2引脚上。74HC573开解锁的控制逻辑如下图:

        74HC573在LE引脚的上升沿开锁,允许1D ~ 8D 的数据存入 锁存器,但此时并不会将这些数据输出到1Q ~ 8Q,输出的数据保持不变。74HC573在LE引脚的下降沿时刻上锁,上锁后不在允许1D8D的数据存入锁存器,同时将之前存入锁存器的数据输出到1Q~8Q,完成一次数据刷新。

        注:为什么会将LED灯连接在锁存器上,我猜可能是因为它与LCD显示屏共用IO口

        由上面的分析我们可以得出我们点灯的思路应该是这样的:

        ① 拉高PD2,进行开锁

        ② 写PC8~PC15,点亮或者熄灭相应LED灯

        ③ 拉低PD2,进行上锁

配置过程

        将 PC8 ~ PC15 配置为输出模式,将控制引脚PD2也配置为输出模式 

         GPIO的初始化配置我们通过CubeMX一键生成即可,以下代码是我认为比较简单实用的:

编写函数

① LED逻辑控制函数

//可以在main.h或者main.c的用户宏定义区中添加
#define GPIO_PIN_AllLED GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12


void led_all_off() //关闭所有的LED灯
{
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_AllLED, 1);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}


void led_all_on() //打开所有的LED灯
{
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_AllLED, 0);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}

void led_off(uint8_t m) //只关闭某一个LED灯(m取值为 1 ~ 8)
{
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7 << m, 1);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}

void led_on(uint8_t n) //只打开某一个LED灯(n取值为 1 ~ 8)
{
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7 << n, 0);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}

void led_status_off(uint8_t b) //关闭一部分LED灯(传入的8位数据分别控制8个灯)
{
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
	GPIOC -> ODR = (b << 8);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}

void led_status_on(uint8_t c) //打开一部分LED灯(传入的8位数据分别控制8个灯)
{
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
	GPIOC -> ODR = (c << 8);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}

② 在主函数中可以这样调用

led_all_off(); //关闭所有的LED灯

led_all_on(); //打开所有的LED灯

led_on(3); //打开LED灯 3

led_off(3); //关闭LED灯 3 

led_status_on(0x06); //打开LED2和LED3

led_status_off(0x06); //关闭LED2和LED3

led_status_on(0x35); //打开LED1,LED3,LED5,LED6

led_status_off(0x35); //关闭LED1,LED3,LED5,LED6

以上就是LED的基本用法了,欢迎大家点赞、收藏、转发 

猜你喜欢

转载自blog.csdn.net/m0_57147943/article/details/123460789