/*****************主函数***********************************/
#include "stm32f1xx_hal.h"
#include "led/led.h"
//引脚LED1=PE5
//引脚LED2=PB5
//现在主函数只有一个LED红灯亮
//主函数关闭任一引脚,LED红灯还会亮
void SystemClock_Config(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
LED_GPIO_Init();
while (1)
{
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET); //高电平LED=1
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
HAL_Delay(1000);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
HAL_Delay(1000);
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 外部晶振,8MHz
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 9倍频,得到72MHz主时钟
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟:72MHz
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB时钟:72MHz
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // APB1时钟:36MHz
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2时钟:72MHz
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
/***************** LED.C文件***********************************/
#include "LED/LED.h"
void LED_GPIO_Init(void)
{
/* 定义IO硬件初始化结构体变量 */
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
LED1_RCC_CLK_ENABLE();
LED2_RCC_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LED1_GPIO, LED1_GPIO_PIN, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LED2_GPIO, LED2_GPIO_PIN, GPIO_PIN_RESET);
/*Configure GPIO pin : PE5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PB5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
#if(0)
void LEDx_StateSet(uint8_t LEDx,LEDState_TypeDef state)
{
/* 检查输入参数是否合法 */
assert_param(IS_LED_TYPEDEF(LEDx));
assert_param(IS_LED_STATE(state));
/* 判断设置的LED灯状态,如果设置为LED灯灭 */
if(state==LED_OFF)
{
if(LED1 & LED1)
LED1_OFF;/* LED1灭 */
if(LED2 & LED2)
LED2_OFF;/* LED2灭 */
}
else if(state==LED_ON) /* 设置LED灯为亮 */
{
if(LED1 & LED1)
LED1_ON;/* LED1亮 */
if(LED2 & LED2)
LED2_ON;/* LED2亮 */
}
else
{
if(LED1 & LED1)
LED1_TOGGLE;/* 设置引脚输出反转 */
if(LED2 & LED2)
LED2_TOGGLE;/* 设置引脚输出反转 */
}
}
#endif
/***************** LED.H文件***********************************/
#ifndef __LED_H__
#define __LED_H__
#include "stm32f1xx_hal.h"
typedef enum
{
LED_OFF = 0,
LED_ON = 1,
LED_TOGGLE = 2,
}LEDState_TypeDef;
/*加入一个宏定义,作为LED状态的合法检测,应用了带参数的宏定义-*/
#define IS_LED_STATE(STATE) (((STATE) == LED_OFF) || ((STATE) == LED_ON) || ((STATE) == LED_TOGGLE))
/* 定义一个uint8_t,置1代表LED配置标志 --------------------------------------------------------------------*/
#define LED1 (uint8_t)0x01 // 00000001
#define LED2 (uint8_t)0x02 // 00000010
/* 加入一个宏定义,作为LED的合法检测,应用了带参数的宏定义----*/
#define IS_LED_TYPEDEF(LED) (((LED) == LED1) || ((LED) == LED2) ))
#define LED1_RCC_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LED1_GPIO_PIN GPIO_PIN_5
#define LED1_GPIO GPIOE
#define LED2_RCC_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
#define LED2_GPIO_PIN GPIO_PIN_5
#define LED2_GPIO GPIOB //0
#define LED1_ON HAL_GPIO_WritePin(LED1_GPIO,LED1_GPIO_PIN,GPIO_PIN_SET) // 输出高电平
#define LED1_OFF HAL_GPIO_WritePin(LED1_GPIO,LED1_GPIO_PIN,GPIO_PIN_RESET) // 输出低电平
#define LED1_TOGGLE HAL_GPIO_TogglePin(LED1_GPIO,LED1_GPIO_PIN) // 输出反转
#define LED2_ON HAL_GPIO_WritePin(LED2_GPIO,LED2_GPIO_PIN,GPIO_PIN_SET) // 输出高电平
#define LED2_OFF HAL_GPIO_WritePin(LED2_GPIO,LED2_GPIO_PIN,GPIO_PIN_RESET) // 输出低电平
#define LED2_TOGGLE HAL_GPIO_TogglePin(LED2_GPIO,LED2_GPIO_PIN) // 输出反转
void LED_GPIO_Init(void);
/* 函数声明 ------------------------------------------------------------------*/
void LEDx_StateSet(uint8_t LEDx,LEDState_TypeDef state);
#endif
不知道你这个问题是否已经解决, 如果还没有解决的话: