GPIO的使用(标准库函数)

1.GPIO输出

推挽输出可以输出高低电平

开漏输出只能输出低电平

#include "stm32f10x.h"                  // 引用头文件
#include "Delay.h"
int main(void){
	
	int i=0;
	
	//打开时钟,开启的是GPIOA的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
		
	//初始化GPIO对像,使用结构体
	GPIO_InitTypeDef GPIO_InitStructure;
	
	
	//GPIO选择推挽输出,推挽输出可以输出高低电平驱动元器件
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	
	//设置操作的IO口
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 ;
	
	//设置IO的输出速度
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	
	//GPIO_Init,初始化GPIO
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	
	
	while(1)
	{
		for(i = 0;i<8;i++)
		{
			GPIO_Write(GPIOA,~(0x0001<<i));
			Delay_s(1);
		}
		
	}
	
	return 1;


}

/*主要步骤
1.打开RCC时钟
2.创建并配置GPIO结构体
3.使用GPIO_INIT初始化GPIO口
4.具体操作gpio口

*/

2.GPIO的输入

GPIO输入与GPIO输出相似,都是同样的步骤:

1.打开RCC时钟

2.配置结构体2

3.初始化GPIO

4.操作GPIO口,使其完成具体的作用

注:GPIO的输入输出都要选择合适的模式,与Pin口

1.光敏电阻传感器与蜂鸣器实战

光敏电阻传感器,是通过光线的改变从而改变电阻的大小。光线越强电阻越小,光线越小,电阻越大。从而通过上下拉电阻改变输出电压的大小。超过阈值时输出1。比阈值小时输出0。经过分析可以知道光线暗时,会输出高电平。光线强时输出低电平。

蜂鸣器分为有源蜂鸣器,与无源蜂鸣器。无源蜂鸣器是无正负之分。并且分为高电平促发与低电平触发。此次使用的是低电平促发的蜂鸣器。

光敏电阻传感器模块:

#include "stm32f10x.h"                  // Device header


void LightSenser_Init(void)
{
	//打开时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//创建GPIO结构体体
	GPIO_InitTypeDef 	GPIO_InitStructure;
	
	//配置GPIO结构体数据
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz ;	
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);
}
unsigned char LightSenser_key(void)
{
	
	
	return (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14));
	
}

蜂鸣器模块:
#include "stm32f10x.h"                  // Device header
/* 本Buzzer驱动库采用的·GPIOB的接口   */

void Buzzer_Init(void)
{
	//打开GPIOA的时钟,配置成使能模式
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//创建结构体GPIO对象
	GPIO_InitTypeDef 	GPIO_InitStructure;
	
	//设置GPIO结构体对象的各个参数
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
	
	//初始化GPIO口
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	
}


/***************************************************************
	*  @brief     函数作用 :开启蜂鸣
  *  @note      备注  :在使用每个函数的时候应该去初始化函数哪里检查IO口是否配置,否者可能会出现操作IO口没用反应的现象
											使用的是低电平驱动的方式
  *  @Sample usage:   函数的使用方法:初始化函数后使用此函数 
 **************************************************************/

void Buzzer_ON()
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}





/***************************************************************
	*  @brief     函数作用 :关闭蜂鸣
  *  @note      备注  :在使用每个函数的时候应该去初始化函数哪里检查IO口是否配置,否者可能会出现操作IO口没用反应的现象
											使用的是低电平驱动的方式
  *  @Sample usage:   函数的使用方法:初始化函数后使用此函数 
 **************************************************************/
void Buzzer_OFF()
{
	GPIO_SetBits(GPIOB,GPIO_Pin_12);
}

void Buzzer_Turn()
{
	if( GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)==0)
	{
		GPIO_SetBits(GPIOB,GPIO_Pin_12);
	}
	else{
		GPIO_ResetBits(GPIOB,GPIO_Pin_12);
	}
}
	
主函数:

#include "stm32f10x.h"                  // Device header


#include "Delay.h"
#include "LED.h"
#include "key.h"
#include "Buzzer.h"
#include "Light_Senser.h"
int main()
{                       
	Buzzer_Init();
 	LightSenser_Init();

	while(1)
	{
		if(LightSenser_key()==1)
		{
			Buzzer_ON();
		}
		else
		{
			Buzzer_OFF();
		}
	}
	
	return 1;
}

3.GPIO的使用总结:

第一步:打开RCC时钟

第二步:创建GPIO结构体

第三步:赋值GPIO结构体

第四步:使用GPIO_Init初始化GPIO

第五步:具体操作GPIO口实现具体功能

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值