以按键驱动为例来实现输入模式配置方法

描述

  1.STM32中GPIO口模式

      每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL, GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。

─ 输入浮空
─ 输入上拉
─ 输入下拉
─ 模拟输入
─ 开漏输出
─ 推挽式输出
─ 推挽式复用功能
─ 开漏复用功能

每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问 (不允许半字或字节访问 )。 GPIOx_BSRR和 GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。

     本示例主要讲解IO口输入模式的应用,以按键驱动为例来实现输入模式配置方法。本次实验所用开发板有3个按键,其中一个为复位按键,另外两个则可用户自行驱动。我们采用板载的2个按键来实现对LED灯开关控制。

2.硬件接口

  SW2为复位按键,已直接接到芯片复位引脚上,SW3接在PB0上、SW4接在PB1上。按键按下均为低电平。
 

GPIO

3.软件设计

       1.打开STM32CubmMX代码生成软件,将PB0、PB1配置为输入模式。
       2.在选定为输入模式后,STM32输入模式分为两种:浮空输入、上拉/下拉输入。
           浮空输入:配置为浮空输入模式,初始化成功后引脚电平状态处于中间态,既不为高也不为低。
           上拉/下拉输入:配置为浮空输入模式,初始化成功后引脚电平状态可以选择是高电平或者低电平。

GPIO

     因为按键按下为低电平,因此要想检测到按键状态变化,初始化时就得设置为与按下相反的电平,所用我们这里选择带上拉的输入模式(选择浮空输入也可,一般建议使用上拉输入模式)。

4.生成配置代码

  使用STM32Cubemx生成代码时,所有的GPIO初始化均会放gpio.c中。

GPIO
  1. 在当前工程的Core目录下新建SYSTEM文件夹保存用户自定义驱动文件。
     
GPIO

       2.创建一个key.c和key.h文件,在SYSTEM目录中创建一个KEY文件夹保存该文件

GPIO

       3.添加头文件路径,编写key.h文件

GPIOGPIO

      4.编写key.c文件,编写按键检测函数

u8 KEY_GetVal(void)
{
	u8 static stat=0;
	if((!KEY1 || !KEY2) && !stat)
	{
		stat=1;
		HAL_Delay(30);
		if(!KEY1)return 1;
		else if(!KEY2)return 2;
		else return 0;
	}
	else
	{
		if(KEY1 && KEY2)stat=0;
	}
	return 0;
}

      5.实现按键控制LED开关

GPIO

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分