从原理图上可以看led用了PC8~PC15,PD2是锁存器的控制端口,先使能这些端口。
(PC8~PC15低电平使能,所以初始化设计成高电平;PD2高电平使能,所以初始化设计成低电平)
在文件夹新建一个文件夹bsp,把led.c和led.h保存至bsp
打开魔术棒保存bsp的路径
mian.h新增代码:
#define uchar unsigned char //定义uchar uint
#define uint unsigned int
led.h代码:
#ifndef _LED_H
#define _LED_H
#include"main.h"
void LED_Disp(uchar dsLED);
#endif
led.c代码:
#include"led.h"
void LED_Disp(uchar dsLED)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//将GPIO的所有LED引脚置高电平
HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//将锁存器打卡,引脚置高电平
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
因为我们在传入参数dsLED,默认给的是低八位,而实际起作用的是高八位(假设共16位),故将dsLED<<8。
mian.c新增代码:
#include "led.h" //包含LED的头文件
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)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LED_Disp(0x01);//点亮第一个灯
HAL_Delay(500);//延时500毫秒
LED_Disp(0x00);
HAL_Delay(500);
}
/* USER CODE END 3 */
}