STM32的GPIO的初始化解析

//LED的I/O口初始化程序 :顺序:1.是能io口时钟 2.初始化io口模式 ,配置相关参数(包括速度,pin脚,mode,最后进行配置)
//3.操作io口,输出高电平


void LED_Init(void)   
{
 
 GPIO_InitTypeDef  GPIO_InitStructure; //定义一个名为 GPIO_InitStructure的结构体变量 
 /* 
 GPIO_InitTypeDef为一结构体变量,其中有三个类型变量, GPIO_Pin、GPIO_Speed 、GPIO_Mode
						 typedef struct
						{
						  uint16_t GPIO_Pin;            
						  GPIOSpeed_TypeDef GPIO_Speed;  
						  GPIOMode_TypeDef GPIO_Mode;    
						}GPIO_InitTypeDef; 
			这其中 GPIOSpeed_TypeDef为枚举变量 ,即  GPIO_Speed只能从下面的三个中选一个 
							     typedef enum
								{ 
								  GPIO_Speed_10MHz = 1,
								  GPIO_Speed_2MHz, 
								  GPIO_Speed_50MHz
								}GPIOSpeed_TypeDef;   
								 
            GPIOMode_TypeDef也是一枚举类型,即 GPIO_Mode也只能从下面的八个模式中选一个 
                                 typedef enum
								{ GPIO_Mode_AIN = 0x0,
								  GPIO_Mode_IN_FLOATING = 0x04,
								  GPIO_Mode_IPD = 0x28,
								  GPIO_Mode_IPU = 0x48,
								  GPIO_Mode_Out_OD = 0x14,
								  GPIO_Mode_Out_PP = 0x10,
								  GPIO_Mode_AF_OD = 0x1C,
								  GPIO_Mode_AF_PP = 0x18
								}GPIOMode_TypeDef;
			 
*/	
 //使能I/O口时钟,注意不同的I/O口使能函数不一样 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//是能GPIOB组的时钟 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//是能GPIOE组的时钟
 
 // 配置GPIOB的模式 :配置成GPIOB.5,频率50MHz,推挽输出模式 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		
 GPIO_Init(GPIOB, &GPIO_InitStructure);	//该句是将上面的信息配置到GPIOB端口,该句不能写在前面,设定好的信息才能进行配置				 
 GPIO_SetBits(GPIOB,GPIO_Pin_5);     //作用:GPIOB.5输出为高 ,与之相对应的为ResetBits输出为低 
			 /*
			 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
			{
			  // Check the parameters    /参数核对 
			  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));//核对端口是不是规定的端口GPIOA-GPIOG 
			  assert_param(IS_GPIO_PIN(GPIO_Pin));    //核对 GPIO_PIN是不是规定的GPIO_Pin_0-15 (详见源代码) 
			  
			  GPIOx->BSRR = GPIO_Pin; 
			//  GPIO_Pin_5对应的高电平0x0020(后两位0x20(十进制为32)对应二级制为0b010 0000)值正
			//好对应的为BSRR寄存器的第六位,所以PB.5输出高电平 
			}
			 */ 
  
     
 // 配置GPIOE的模式	:配置成GPIOB.5,频率50MHz,推挽输出模式,和B的一样,
 //所以战舰提供的省略了相同的,我这里为了便于理解没有省略					 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	    	
 GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 
 GPIO_SetBits(GPIOE,GPIO_Pin_5); 						 
}

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值