一、简洁版本,便于阅读,不方便移植
//led.h
#define LED1 PBout(0)
#define LED2 PBout(1)
#define LED3 PBout(5)
void LED_Init(void);//初始化
//led.c
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5; //PB.0.1.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_0); //GPIOB.0输出高电平
GPIO_SetBits(GPIOB,GPIO_Pin_1); //GPIOB.1输出高电平
GPIO_SetBits(GPIOB,GPIO_Pin_5); //GPIOB.5输出高电平
}
//main.c
int main(void)
{
HSE_SetSysClock(RCC_PLLMul_9);//SYSCLKΪ8*9=72M
LED_Init();
while(1)
{
LED1=0;
LED2=1;
LED3=1;
}
}
如果想要修改三个LED为PA6,PA7,PA8,修改的地方如下:
二、编写更复杂,便于移植
//led.h
#define LED1_GPIO_PORT GPIOB /* GPIO端口组 */
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */
#define LED1_GPIO_PIN GPIO_Pin_0 /* GPIO端口号 */
#define LED2_GPIO_PORT GPIOB /* GPIO端口组 */
#define LED2_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */
#define LED2_GPIO_PIN GPIO_Pin_1 /* GPIO端口号 */
#define LED3_GPIO_PORT GPIOB /* GPIO端口组 */
#define LED3_GPIO_CLK RCC_APB2Periph_GPIOB /* GPIO端口时钟 */
#define LED3_GPIO_PIN GPIO_Pin_5 /* GPIO端口号 */
#define LED1_OFF GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);//LED1对应GPIO输出高电平
#define LED1_ON GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);//LED1对应GPIO输出低电平
#define LED2_OFF GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);//LED2对应GPIO输出高电平
#define LED2_ON GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);//LED2对应GPIO输出低电平
#define LED3_OFF GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);//LED3对应GPIO输出高电平
#define LED3_ON GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);//LED3对应GPIO输出低电平
void LED_Init(void);//初始化
//led.c
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO_InitTypeDef类型的结构体
RCC_APB2PeriphClockCmd(LED1_GPIO_CLK|LED2_GPIO_CLK|LED3_GPIO_CLK,ENABLE);//使能LED1.2.3端口对应时钟
GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;//选择LED1.2.3端口号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure); //初始化GPIOB
GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;//选择LED1.2.3端口号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure); //初始化GPIOB
GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;//选择LED1.2.3端口号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure); //初始化GPIOB
GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN); //LED1输出高电平
GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN); //LED2输出高电平
GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN); //LED3输出高电平
}
//main.c
int main(void)
{
HSE_SetSysClock(RCC_PLLMul_9);//SYSCLKΪ8*9=72M
LED_Init();
while(1)
{
LED1_ON;
LED2_ON;
LED3_ON;
}
}
如果想要修改三个LED为PA6,PA7,PA8,修改的地方如下:
可以看出来第二种方式只需要修改.h
文件即可,移植起来更加方便。