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口实现具体功能