单片机
返回首页

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

2023-08-21 来源:elecfans

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

      }

    }

  }

}

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


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章