#ifndef __LED_H
#define __LED_H
#include"./SYSTEM/sys/sys.h"
#define LED0_GPIO_PORT GPIOB
#define LED0_GPIO_PIN GPIO_PIN_5
#define LED0_GPIO_CLK_ENABLE do{__HAL_RCC_GPIOB_CLK_ENABLE();}while(0)
#define LED1_GPIO_PORT GPIOE
#define LED1_GPIO_PIN GPIO_PIN_5
#define LED1_GPIO_CLK_ENABLE do{__HAL_RCC_GPIOe_CLK_ENABLE();}while(0)
#define LED0(x) do{(x==0)? \
HAL_GPIO_WritePin(LED0_GPIO_PORT,LED0_GPIO_PIN,GPIO_PIN_RESET): \
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET); \
}while(0) /* \控制换行不报错*/
#define LED1(x) do{(x==0)? \
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET): \
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET); \
}while(0)
void led_init(void);
led.h文件。为了换行不报错 要在?:中加入\来确保编译正确。
#include"./BSP/LED/led.h"
void led_init(void)
{
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
gpio_init_struct.Pin = GPIO_PIN_5;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
/*gpio_init_struct.Pull = GPIO_PIN_5;*/
//F1系列输出时设置上下拉无效
gpio_init_struct.Speed =GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB,&gpio_init_struct);
HAL_GPIO_Init(GPIOE,&gpio_init_struct);
/*为了灯一开始就是灭的*/
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);
}
led.c文件!要对GPIOB,E都要使能时钟。
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
int main(void)
{
HAL_Init(); /*初始化HAL库*/
sys_stm32_clock_init(RCC_PLL_MUL9); /*设置时钟72Mhz*/
delay_init(72); /*延时初始化*/
led_init(); /*LED初始化*/
while(1)
{
LED0(0);
LED1(1);
delay_ms(500);
LED0(1);
LED1(0);
delay_ms(500);
}
}
主函数 没啥说的。记住初始化HAL库