STM32GPIO的操作

基于STM32F103XX系类的GPIO操作

第一次这个这个论坛写博客,算是初来乍到;有写的不到位的地方还望能够谅解。
*闲话不多说,还是老套路,先上代码,接着就是代码的讲解,中间可能穿插部分C语言知识。

 GPIO_InitTypeDef  GPIO_InitStructure;//这里表示定义了一个GPIO的结构体,结构体名为:GPIO_InitStructure
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);	 // RCC_APB2PeriphClockCmd-->这句话表示开启RCC时钟总线,而这个时钟总线下面对应着相对应的GPIO的时钟线
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;	//这句话表示引入GPIO_InitStructure结构体中的成员变量-》GPIO_Pin,而这个GPIO_Pin这个成员变量表示的则是,定义的是那个端口		
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //这句话表示引入GPIO_InitStructure结构体中的成员变量-》GPIO_Mode,而这个GPIO_Mode表示对GPIO模式的设定,我这里设定是推挽输出。	 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	////这句话表示引入GPIO_InitStructure结构体中的成员变量-》GPIO_Speed,而这个GPIO_Speed表示是对IO口的输出速率的一个设定
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 
 GPIO_SetBits(GPIOA,GPIO_Pin_8);//这句话表示,GPIO初始化的时候需要给它一个电平状态,例如:高电平或者是低电平,此处代码设定的为高电平,若是想设为低电平则是:	GPIO_ResetBits(GPIOD,GPIO_Pin_2);						 

在这里设计了几个专用名词,“ 结构体”,那么我就顺道给大家补充下结构体的基本知识点
结构体的定义:我所理解的结构体:所谓的结构体,就是用户自己定义的一个数据类型;这个数据类型是可以将一个或者多个数据类型不一样的数据放在一个数据类型中。
结构体的声明:

struct 结构体类型名
{
数据类型  变量;
....
}结构体别名;

言归正传,那么对于这个代码,我们的数据结构体又是如何的呢?
请看下面的代码:

typedef struct
{
  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.
                                      This parameter can be any value of @ref GPIO_pins_define */

  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.
                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */

  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.
                                      This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;

这个结构体中定义了GPIO的端口,IO口输出的速度,IO口的模式;既然提及的IO口的模式,那么就给大家顺带提及代码。
下面为GPIO的模式的结构体代码:

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;

关于IO口模式的相关代码讲解,将会在下一篇博客中重点讲解。
至此,GPIO的初始化代码已经讲解完成了,那么我们又要如何调用呢?别急,马上上代码

 int main(void)
 {	
		LED_Init();
	while(1)
	{
		//此处是用户的执行代码
		//例如:
		 GPIO_SetBits(GPIOA,GPIO_Pin_8);//这句话表示,将GPIOA的端口拉高
	}
}	 

//至此,关于GPIO的基本操作已经为各位讲解完成了,下一期将为大家讲解,GPIO中模式的设定。----->编写人:吴银亮

猜你喜欢

转载自blog.csdn.net/qq_39850524/article/details/106918866