这个是LED.H文件相关的宏定义 没有任何问题
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
#define LEDRED_PORT GPIOB
#define LEDRED_CLK RCC_APB2Periph_GPIOB
#define LEDRED_PIN GPIO_Pin_5
#define LEDGREED_PORT GPIOB
#define LEDGREED_CLK RCC_APB2Periph_GPIOB
#define LEDGREED_PIN GPIO_Pin_0
#define LEDBLUE_PORT GPIOB
#define LEDBLUE_CLK RCC_APB2Periph_GPIOB
#define LEDBLUE_PIN GPIO_Pin_1
#define ON 0
#define OFF 1
#define LEDRED(a) if(a) GPIO_SetBits(LEDRED_PORT,LEDRED_PIN); else GPIO_ResetBits(LEDRED_PORT,LEDRED_PIN)
#define LEDGREED(a) if (a) GPIO_SetBits(LEDRED_PORT,LEDRED_PIN); else GPIO_ResetBits(LEDRED_PORT,LEDRED_PIN)
#define LEDBLUE(a) if (a) GPIO_SetBits(LEDRED_PORT,LEDRED_PIN); else GPIO_ResetBits(LEDRED_PORT,LEDRED_PIN)
#define LED_RED LEDRED(ON); LEDGREED(OFF) LEDBLUE(OFF)
#define LED_GREED
LEDRED(OFF);
LEDGREED(ON)
LEDBLUE(OFF)
#define LED_BLUE
LEDRED(OFF);
LEDGREED(OFF)
LEDBLUE(ON)
#define LED_YELLOW
LEDRED(ON);
LEDGREED(ON)
LEDBLUE(OFF)
#define LED_PURPLE
LEDRED(ON);
LEDGREED(OFF)
LEDLUE(ON)
void LED_GPIO_Config(void);
#endif
这个LED.C文件的初始化没有问题
#include "led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure ;
RCC_APB2PeriphClockCmd ( LEDRED_CLK | LEDGREED_CLK | LEDBLUE_CLK,ENABLE );
GPIO_InitStructure .GPIO_Pin =LEDRED_PIN;
GPIO_InitStructure .GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStructure .GPIO_Speed=GPIO_Speed_50MHz ;
GPIO_Init (LEDRED_PORT,&GPIO_InitStructure );
GPIO_InitStructure .GPIO_Pin =LEDGREED_PIN;
GPIO_Init (LEDGREED_PORT,&GPIO_InitStructure );
GPIO_InitStructure .GPIO_Pin =LEDBLUE_PIN;
GPIO_Init (LEDBLUE_PORT,&GPIO_InitStructure );
LEDBLUE (OFF);
LEDRED (OFF);
LEDGREED (OFF);
}
然后烧录板子 发现LED没有初始化 执行任何操作仿佛有些已经写入了指令
最后我不用宏函数初始化LED了 我直接用了 位函数初始化 发现没问题
疑问: 难道不可以这样用吗 还是要编译 还是.C 文件先于.H文件的编写所以没有初始
求解