STM32数据手册开发实现按键输入功能

2023-08-21  

上一篇我们讲解了如何通过数据手册和库函数手册开发STM32的LED驱动(也就是通用GPIO的输出功能),今天我们讲解其输入功能实现。接上篇寄存器介绍(STM32根据数据手册完成LED驱动开发(寄存器版和库函数版介绍),GPIO有关寄存器有7个,本节用到端口配置低寄存器(因为根据电路原理图设计,用到引脚PC5),端口输入数据寄存器。


就开发驱动流程讲,先要看硬件电路接口,定义错了接口,啥功能都实现不了。根据硬件连接情况,我们分析并使用KEY0进行设计。KEY0 的一端接地,一端接单片机PC5引脚,表示我们的按键是按下采集低电平信号,也就是读取的数据是0。好,那么我们按照上节课讲解的八种工作模式,我们肯定是输入模式,但是是哪一种呢?这里就需要有一个分析,我们的51单片机P1-P3接口设计的时候都内置了一个弱上拉电阻,所以设计时都是采集低电平信号。同样,我们32这里要配置为上拉输入, 上拉是将不确定信号(上电时极容易误导信号状态)通过一个电阻钳位在高电平,电阻同时限流作用,如果不,那输入口没有了高低电平对比,纵然按键按下接到了地,单片机读取到的是不确定信号,分析自然就会有问题。

图片

图片

我们了解了配置后,只需要再了解下数据输入寄存器。通过对低16位读出,就能了解对应PIN引脚的电平情况。

图片

今天呢,我们还要讲解怎么分析库函数《stm32f10x_stdperiph_lib_um.chm》

开发stm32驱动,首先是开启相应的时钟,这要看RCC

图片

中文参考手册的第六章,RCC控制,那么我们就去库函数中的module下找RCC模块,看其中各个函数的意义。

图片

找到这个目录下打开加号,全是函数,其中RCC_APB2PeriphClockCmd就是今天要用的。你问我怎么知道,因为我把这些基本都了解了一下,大家只需要先跟着我学,做,后面自己熟练了,自己就去探索新功能了。

上面这个函数就是开启相应功能时钟的,再点击到函数中

图片

参数介绍,就有我们按键需要的GPIOC时钟。

再然后,我们用到GPIO通用输入功能,那就找GPIO模块下的函数,有初始化配置(也就是前面说的输入输出模式配置寄存器)函数GPIO_Init和数据位读取GPIO_ReadInputDataBit函数

图片

图片

好,安排初始化代码


void KEY_Init()

{

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

  GPIO_Init(GPIOC,&GPIO_InitStructure);

}

主函数代码


int main()

{

  delay_init();

  LED_Init();

  KEY_Init();

  while(1)

  {

    if(KEY0==0)

    {

      delay_ms(10);

      if(KEY0==0)

      {

        GPIO_ResetBits(GPIOA,GPIO_Pin_8);

        delay_ms(500);

        GPIO_SetBits(GPIOA,GPIO_Pin_8);

        delay_ms(500);

        while(!KEY0);

      }

    }

  }

}

延时函数我们下节课讲解,涉及时钟问题。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。