首页 理论教育 STM32固件库编程实现2Key驱动

STM32固件库编程实现2Key驱动

时间:2023-10-21 理论教育 版权反馈
【摘要】:第五步,对PC13初始化:GPIO_Init;至此,PAO与PC13初始化完成。返回值是无符号字符型变量,有GPIOx与GPIO_Pin两个形参,分别代表GPIO组与引脚号。

STM32固件库编程实现2Key驱动

key.h文件的代码与led.h类似,首先是条件编译伪指令,之后是GPIO的初始化函数与按键扫描函数的声明。程序代码如下:

按键驱动代码在key.c文件内编写,与key.h相呼应,首先是按键的初始化函数,之后是按键扫描函数。程序代码如下:

1.KEY-GPIO-Config()函数

我们首先看KEY_GPIO_Config()函数。GPIO初始化函数与led.c初始化函数类似,步骤也一模一样。

第一步,开启GPIO时钟。由于按键一个接在PA0,另一个接在PC13,涉及GPIOA与GPIOC,即要打开两组GPIO的时钟,可以使用RCC_AHB1PeriphClockCmd函数一次性打开,具体方法如下:

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC,ENABLE);

这里使用一个或运算“|”,将RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC作为第一个实参,同时打开两个总线时钟。

第二步,建立GPIO初始化结构体:

GPIO_InitTypeDef GPIO_InitStruct;

第三步,配置GPIO结构体的成员:

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;(www.xing528.com)

GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;

第四步,使用初始化函数对PA0进行初始化:

GPIO_Init(GPIOA,& GPIO_InitStruct);

完成了PA0初始化后继续完成PC13的初始化,省略前两步,同样执行第三步,配置结构体成员:

由于都是配置GPIO输入,PC13与PA0的MODER与PUPDR配置一样,相同配置的语句可以不必重复。

第五步,对PC13初始化:

GPIO_Init(GPIOC,& GPIO_InitStruct);

至此,PAO与PC13初始化完成。

2.KEY-Scan(GPIO-TypeDef*GPIOx,uint16-t GPIO-Pin)函数

按键扫描函数主要用于扫描按键状态,把扫描结果返回给函数调用者。返回值是无符号字符变量,有GPIOx与GPIO_Pin两个形参,分别代表GPIO组与引脚号。

函数首先使用if语句对GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)进行判断,如果是KEY_ON(已经宏定义,相当于1),说明按键被按下,则使用延时函数,执行软件去抖处理,然后使用While语句等待按键松开,当按键松开后返回KEY_ON;如果按键未被按下,返回KEY_OFF(宏定义为0)。函数的返回值是无符号字符型变量。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈