两种编写代码风格方式对比

文章展示了两种方式设置和控制STM32上的LED,第一种是简洁但不便于移植的实现,第二种是更复杂但易于移植的实现。在第二种方式中,通过定义宏来配置LED的GPIO端口、时钟和操作函数,使得代码更易修改,例如将LED从PB口改为PA6,PA7,PA8只需更改.h文件。
摘要由CSDN通过智能技术生成

一、简洁版本,便于阅读,不方便移植

//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文件即可,移植起来更加方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值