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

控制/MCU

1814人已加入

描述

上一篇我们讲解了如何通过数据手册和库函数手册开发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);
      }
    }
  }
}

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

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

全部0条评论

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

×
20
完善资料,
赚取积分