温馨提示:本文不会重复之前提到的内容,如需查看,请参考附录。
目录
内容提炼:
根据原理图,选择PC8~PC15引脚控制LED,PD2引脚控制锁存器。
- LED控制引脚配置为:推挽输出,高电平。
- 根据锁存器芯片手册(资料包),PD2引脚配置为:推挽输出,低电平。
- 添加用户标签。
快捷方式:直接在main.c的用户代码段实现下面的函数。
注意:
LED灯不会自动熄灭,有时候需要先关闭所有的灯,然后再点亮需要的灯。
可以用 " | " (或),连接多个LED_Pin实现多个灯一起操作。
void LED_switch(uint16_t GPIO_Pin, GPIO_PinState PinState)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,GPIO_Pin,PinState);
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_RESET);
}
驱动函数:个人认为没必要
一、需求分析
1、需要的外设资源分析:
8个LED控制引脚,1个锁存器控制引脚
2、外设具体分析:
查看原理图,和手册。
根据原理图,选择PC8~PC15引脚控制LED,PD2引脚控制锁存器。
- LED控制引脚配置为:推挽输出,高电平。
- 根据锁存器芯片手册(资料包),PD2引脚配置为:推挽输出,低电平。
3、软件分析:
要求分析:一个独立的驱动程序,需要在比赛时快速写出、简单、便于记忆。
功能分析:
a、开/关某些LDE灯
b、根据指令,改变LED灯阵的状态
二、软件配置
建立名为“dev_LED_Demo”的项目。
按照分析配置引脚结果如图所示:
生成项目文件后,打开MDK。
新建并导入文件:
在 "D:\IoT-Engineer\IoT-Project\BBC-Demo\object\dev_LED_Demo\Core"文件夹中新建两个.txt文件,分别命名为led.c和led.h(即后缀也要修改)
然后把.c文件放到Src,.h文件放到Inc。
然后将这两个文件Add进来。
三、代码编写
分析:
需要宏:
LED_ALL:所有LED引脚
LED_NULL:0x00
函数:
a、开/关某些LDE灯
void LED_switch(需要操作的灯,状态);
b、根据指令,改变LED灯阵的状态
void LED_change(需要点亮的灯);
在MDK中编写代码,代码如下:
led.h:
#ifndef __LED_H
#define __LED_H
#include "main.h"
#define LED_ALL LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin
#define LED_NULL 0x00
void LED_switch(uint16_t GPIO_Pin, GPIO_PinState PinState);
void LED_change(uint16_t GPIO_Pin);
#endif /* __LED_H */
led.c:
#include "led.h"
void LED_switch(uint16_t GPIO_Pin, GPIO_PinState PinState)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,GPIO_Pin,PinState);
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_RESET);
}
void LED_change(uint16_t GPIO_Pin)
{
LED_switch(LED_ALL,GPIO_PIN_SET);
LED_switch(GPIO_Pin,GPIO_PIN_RESET);
}
四、运行测试
在main.h中引用"led.h",
在 main(void) 的 while(1) 代码段,编写以下代码
/* USER CODE BEGIN WHILE */
while (1)
{
LED_change(LED1_Pin|LED2_Pin);
HAL_Delay(500);
LED_change(LED_NULL);
HAL_Delay(500);
LED_change(LED_ALL);
HAL_Delay(500);
LED_change(LED_NULL);
HAL_Delay(500);
/* USER CODE END WHILE */
编译、下载。
运行结果如下:
LED驱动测试