1、前言
前面配置了灯光后大家应该都差不多知道GPIO参数的配置了,在本学习笔记中,我们学习–按键控制;这个是在灯光的基础上把输出改为输入,具体的配置还要看你的原理图,如果是上拉的话就上拉,没有就浮空。
2、添加相关的标准库
在用标准库配置GPIO的时候,我们需要手动添加这个GPIO的库函数。
如下图的步骤所示添加,添加如第五步里面的几个库函数,如果看这个图还看不懂话请私聊我或者在下方的评论区评论留言。
3、GPIO配置参数的简单说明
在添加了相关的库函数之后我们可以去哪个stm32f10x_gpio.c的头文件stm32f10x_gpio.h中可以看到在STM32F103中的GPIO配置需要配置那些参数。
如图:
上图展示了需要配置这三个参数:
uint16_t GPIO_Pin
GPIOSpeed_TypeDef GPIO_Speed
GPIOMode_TypeDef GPIO_Mode
其中这三个参数是什么意思呢?
第一个是表示第几个引脚;
第二个表示引脚速度需要配置多少;如:
引脚速度需要多少可根据自己的需求配置。在本例子不需要到。
第三个表示引脚的模式是什么;如:
引脚模式是什么可根据自己的需求配置。在本例子中为上拉输入
知道了这些参数的意思后就我们就好开始配置了。
4、GPIO初始化程序
在上面介绍了GPIO配置的参数后我们可以开始编写GPIO初始化程序了。
void Led_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个需要配置的GPIO引脚结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//在使用那个GPIO引脚的前提下需要开启相关的时钟,这个很重要
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14|GPIO_Pin_15; //按键连接单片机的引脚分别为PC14-15。
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //引脚模式配置为上拉输入模式。
GPIO_Init(GPIOC, &GPIO_InitStructure); //配置好参数之后就开始初始化GPIO。
}
如上图为按键的初始化程序。
5、GPIO电平的控制
如果想要读取GPIO的电平的话,我们还需要使用到相关的库函数,这个也是在stm32f10x_gpio.c中,如果想要查找的,去头文件比较方便。
下面我就不介绍了,反正就在这两个文件里面,下面我直接给出程序和注释
#define KEY1 (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15))
#define KEY2 (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_14))
这个实在头文件里面定义的,使用了宏定义做个简单替代,可以方便调用和直观明了。
6、主函数
int main()
{
Delay_Init(72);
Led_Init();
Key_Init();
while(1)
{
if(KEY1)
{
delay_ms(10);//按键消抖
LED1_ON;
LED2_OFF;
}
else if(KEY2)
{
delay_ms(10);//按键消抖
LED1_OFF;
LED2_ON;
}
}
}