STM32 GPIO的基础实现


什么是GPIO

  GPIO 英文全称 general porpose intput output 即,通用输入输出端口。 顾名思义,芯片最基本的输入输出接口。
  STM32或其它单片机芯片的GPIO引脚可以与外部设备连接起来,可以实现与外部设备通讯、控制或者数据采集的功能。除了电源类引脚(VDD、VSS、VREF+、VREF-、VSSA、VDDA)、 晶振引脚(OSC_IN、OSC_OUT )复位管引脚NRST、BOOT 引脚(BOOT0 、BOOT1),其它一般都是GPIO引脚 , 取名 PA1、PA2…PB1、PB2…PC1、PD1… 等等。
  作为输出时,可以控制为外设的高低电平,控制LED、 输出PWM、输出时钟等等,作为输入可以用作ADC、DAC、电平检测、中断等功能。


STM32中GPIO的基础实现

  GPIO最为最基础的实现也就是将端口作为高低电平来使用。

1、初始化

  下面的代码stm32的GPIO初始化,其中GPIO_Output_Init_PE5(void)是初始化PE5口为输出的GPIO口,将端口的初始化结构体赋值并将其设置为高电平。其中GPIO_Input_Init(void)是将PA5设置为输入的GPIO口。
  


//GPIO 输出初始化
void GPIO_Output_Init_PE5(void)
{    	 
	GPIO_InitTypeDef  GPIO_InitStructure;	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOE时钟	
	//GPIO初始化设置
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//指定pin脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
	GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化	
	GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置高电平
}

//GPIO 输入初始化
void GPIO_Input_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //指定pin脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//指定输入模式
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
	GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化
}

2、控制输出

  前面如果已经初始化好了输出模式,那么我们就可以将该口的输出就可以任由我们控制了。通过GPIO_ResetBits函数可以将指定口的电平置低,而通过GPIO_SetBits则可以将指定的端口置高。

//输出低
GPIO_ResetBits(GPIOE,GPIO_Pin_5);//设置PE5为低电平
//输出高
GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置PE5为高电平

3、控制输入

   如果已经初始化好了输入模式,那我们就可以将该口用来检测输入和打印效果,见下面的程序实现。

//##############  输入电平测试  ############//
void  GpioLevelTest()
{ 
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5))//返回为1,检测为高电平
	{
		printf("------->1\r\n");
	}
	else
	{
		printf("------->0\r\n");
	}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星papa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值