GPIO使用的一些总结

1.GPIO是统用I/O口,对于stm32来说,IO的输入与输出需要一定的寄存器来进行一些控制,从图中也能看出GPIO的输入与输出分别做不同的控制,包括位设置/清除寄存器,输入与输出寄存器,如果希望真正了解GPIO,这个图需要了解电流走向;
在这里插入图片描述
2.接下来就是非常实际的编程问题,在寄存器设置这一块,有两个需要设置,一个GPIOx->CRL或者GPIOx->CRH,(其中x可以取到A-G)这个部分是设置GPIO的输出/输入,以及速度,即其中的CNF1,CNF0,mode1,mode0 见下图:
在这里插入图片描述
下面是补充一下mode1,mode0对应的速度;
在这里插入图片描述
3.接下来想说的就是GPIO口的设置在stm32固件库里有直接设置的函数,可以调用,当然也可以自己设置,下面给出的是一个LED输出的初始化GPIO口的函数,用的就是调用固件库,推荐用固件库;

void LED_Init(void)
{    	 
  GPIO_InitTypeDef  GPIO_InitStructure;
 	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);	
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;		
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽式 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //50MHz
  GPIO_Init(GPIOG, &GPIO_InitStructure);					     //GPIO
  GPIO_SetBits(GPIOG,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);	
}


4.另一个事是关于时钟的,之前有了解过时钟,也看过相关结构体和函数,但是一直不是很了解他的作用,这里给出一个时钟必须使用的地方就是,在初始化GPIO前必须使能GPIO的时钟,我不懂时钟,只是学习期,供大神给出解释。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);	

5.还有一点就是上面关于CRL和CRH,这是两个32位寄存器,其实可以发现一个IO引脚需要4bit来确定输入输出方式及速度,所有CRL可以控制一个GPIO的0-7的8个引脚,CRH则控制8-15等8个引脚,正好确定了GPIOx的16个引脚;在一个就是GPIO的IDR和ODR,这两个均是32位寄存器,但都是去低16位来决定GPIO的引脚值,每位决定一个引脚值。这里给出GPIO->CRL的分配图,CRH类似;
在这里插入图片描述
目前就是我的了解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值