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

发布者:SereneVoyage最新更新时间:2023-08-21 来源: elecfans关键字:STM32  数据手册 手机看文章 扫描二维码
随时随地手机看文章

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

      }

    }

  }

}

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


关键字:STM32  数据手册 引用地址:STM32数据手册开发实现按键输入功能

上一篇:STM32单片机学习笔记(3):虚拟串口
下一篇:应用笔记|巧用 STM32CubeIDE 之编译警告

推荐阅读最新更新时间:2024-11-05 14:43

STM32端口时钟
1、RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIOC时钟 为什么说有的CortexM3外设在配置前都要配置RCC对于的时钟? 因为CortexM3是时钟驱动型,所有的外设都被分配到不同的总线桥上,有总线来提供工作的时钟。当关闭某个外设的时钟的时候,也就意味做这个外设被关闭了,以期达到可以控制MCU电流消耗的目的。 2、RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIOC时钟 为什么配置C端口,需要初始化的是APB2时钟? 因为STM32有两条外设桥总线,分别为最大72Mhz的A
[单片机]
<font color='red'>STM32</font>端口时钟
STM32——ADC
一、ADC指标 有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行 ;ADC的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中 ;模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高 / 低阈值。 对于 ADC 来说,我们最关注的就是它的分辨率、转换时间、ADC 类型、参考电压范围: (1)分辨率:12 位分辨率。不能直接测量负电压,所以没有符号位,即其最小量化单位 LSB= Vref+ / 212 。 (2)转换时间:转换时间是可编程的。采样一次至少要用 14 个 ADC 时钟周期,而 ADC 的时钟频率最高为 14MHz,也就是说,它的采样时
[单片机]
<font color='red'>STM32</font>——ADC
几种STM32开发IDE的比较与选择
用于STM32开发的IDE有很多,ST公司的网站上足足列出了19个,其中,常用的商业版软件有: MDK-ARM-STM32 IAR-EWARM 这两个商业版软件虽然好用,但终究是商业版软件。免费或评估版的软件要么有器件型号限制,要么有程序容量限制。 免费的STM32开发IDE有很多,基本上都是基于Eclipse+GNU GCC的。 网上有教程介绍如何手工用Eclipse + GNU GCC搭建STM32开发环境的,但是过程比较麻烦,而且因为版本的差异,各个教程的内容有差异,本人做了多次尝试都没有配置成功。 现在STMicroelectronics公司主推HAL+STM32CubeMX的开发方式,STM32Cu
[单片机]
几种<font color='red'>STM32</font>开发IDE的比较与选择
STM32 Systick定时器在实现1us延时的问题与解决
问题: 使用systick_config()函数来实现计数,这个函数在下面代码中的 SysTick_CTRL_TICKINT_Msk 开启了中断。不论系统时钟为72Mhz或36Mhz若设置STM32每10us进入一次中断,计时是可以的;而每1us进入中断,由于中断指令较多,那么程序就会困在中断里出不来。 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
[单片机]
基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数
经本人刻苦钻研,将51单片机上用的矩阵键盘扫描程序移植到了stm32上,同时也做了很大的改进,最大的改进莫过于消抖这块了。以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序被搁置,显然,程序的实时性大打折扣,今天便在此让新手们别delay,从此走进一个崭新的扫描消抖世界!(本人也是新手——爱钻研的新手哈!^_^) //stm32矩阵键盘翻转扫描法(PB口的低8位) //将此矩阵键盘扫描程序放在定时器中断服务程序里 //每10ms进入一次中断服务程序 s8 scan_MatrixKey(void) { #define PORT GPIOB- IDR u8 colum
[单片机]
用qt编写上位机与stm32通信
好的文章 1、Qt5.5.1实现通用串口程序https://www.2cto.com/kf/201607/524028.html 2、QT实现串口通信 https://www.2cto.com/kf/201610/558768.html 资源下载:https://download.csdn.net/download/hellybobo/9950904?web=web 本文采用的的开发环境是VS2010+Qt5.5.1版本,所有程序不是通过Qt Creator编译的,如果有需要可以介绍VS2010和Qt环境的搭建和简单的使用。 QSerialPort QSerialPort这个类是从QT5.1开始引入的,之前都是通过
[单片机]
用qt编写上位机与<font color='red'>stm32</font>通信
STM32学习笔记一一HEX文件和BIN文件格式
1. 引言 今天看串口的 IAP ,平时我们通过 JTAG 等工具下载的都是 HEX 文件,都没有思考一下 HEX 的文件组成。而串口 IAP 下载的是 BIN 文件,刚好在这里区分学习一下。 我们平时烧写 HEX 文件是不需要设置地址信息的,因为已经包含在文件里面,而使用 BIN 烧写,需要在程序中指定地址。 2. 简述 Intel hex 文件是记录文本行的 ASCII 文本文件,在 Intel HEX 文件中,每一行是一个 HEX 记录,由十六进制数组成的机器码或者数据常量。Intel HEX 文件经常被用于将程序或数据传输存储到 ROM、EPROM,大多数编程器和模拟器使用Intel HEX文件。 2.1
[单片机]
<font color='red'>STM32</font>学习笔记一一HEX文件和BIN文件格式
STM32学习之ADC
对于STM32,在使用ADC的时候需要配置几个参数。 (1) 第一个参数是ADC_Mode,这里设置为独立模式: ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; 在这个模式下,双ADC不能同步,每个ADC接口独立工作。所以如果不需要ADC同步或者只是用了一个ADC的时候,就应该设成独立模式了。 (2) 第二个参数是ADC_ScanConvMode,这里设置为DISABLE。 ADC_InitStructure.ADC_ScanConvMode = DISABLE; 如果只是用了一个通道的话,DISABLE就可以了,如果使用了多个通道的话,则必须将其设置
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved