TM4C123库函数学习(4)--- 按键输入

简介: TM4C123库函数学习(4)--- 按键输入

前言

(1)本文主要介绍按键输入,因为开发板上没有硬件消抖,而如果按照常规的延时20ms再去while阻塞方式当然显得有些愚蠢。因为20ms对于CPU是一个漫长的过程,然后再去一个whiile阻塞等待。接下来我将介绍本人结合与多位大佬交流想出来的一种按键消抖方案。

(2)注意,学习本文之前,需要先学习滴答定时器那一章节。


函数介绍

ROM_GPIOPadConfigSet()

为指定的 PIN 设置 PAD 配置。

/****** 函数声明 ******/
//这个存放在ROM
void ROM_GPIOPadConfigSet(uint32_t ui32Port,uint8_t ui8Pins,uint32_t ui32Strength,uint32_t ui32PinType);
//这个是存放在flash
void GPIOPadConfigSet(uint32_t ui32Port,uint8_t ui8Pins,uint32_t ui32Strength,uint32_t ui32PinType);
/****** 函数介绍 ******/
/* 作用 : 为指定的 PIN 设置 PAD 配置。
 * 传入参数 : 
     * ui32Port : GPIO口的基地地址,GPIO_PORTx_BASE,x可为A,B,C,D,E,F,G,H
     * ui8Pins : GPIO_PIN_X,x可为1,2,3,4,5,6,7
     * ui32Strength : 设置引脚驱动强度,与输入无关
                      GPIO_STRENGTH_2MA,(驱动强度为2mA)
                      GPIO_STRENGTH_4MA,(驱动强度为4mA)
                      GPIO_STRENGTH_8MA,(驱动强度为8mA)
                      GPIO_STRENGTH_8MA_SC,(指定 8 mA 输出驱动器并具有旋转控制)
                      GPIO_STRENGTH_6MA,(驱动强度为6mA)
                      GPIO_STRENGTH_10MA,(驱动强度为10mA)
                      GPIO_STRENGTH_12MA,(驱动强度为12mA)
     * ui32PinType : 用于设置上下拉,休眠唤醒,开漏模式等
                      GPIO_PIN_TYPE_STD,(推挽引脚,如果是设置为输入,那么就是浮空输入)
                      GPIO_PIN_TYPE_STD_WPU,(弱上拉引脚)
                      GPIO_PIN_TYPE_STD_WPD,(弱下拉引脚)
                      GPIO_PIN_TYPE_OD,(开漏引脚)
                      GPIO_PIN_TYPE_ANALOG,(指定模拟输入)
                      GPIO_PIN_TYPE_WAKE_HIGH,(用作休眠唤醒源的引脚,高)
                      GPIO_PIN_TYPE_WAKE_LOW,(用作休眠唤醒源的引脚,低)
 * 返回参数 : 无
*/


ROM_GPIODirModeSet()

(1)设置指定引脚的方向和模式。

(2)引脚有三种模式,可以设置为软件控件或者是硬件控件。

(3)软件控件就是配置输入输出,这个很好理解。硬件控件是什么玩意呢?

在硬件控制模式下,GPIO管脚的输入和输出状态由外部设备控制,而不是由微控制器控制。这种模式通常用于外部设备需要控制或读取GPIO管脚状态的情况,例如与其他外部器件进行通信或数据采集。

(4)这个硬件控件与我们无关,我不进行过多讲解


/****** 函数声明 ******/
//这个存放在ROM
void ROM_GPIODirModeSet(uint32_t ui32Port,uint8_t ui8Pins,uint32_t ui32PinIO);
//这个是存放在flash
void GPIODirModeSet(uint32_t ui32Port,uint8_t ui8Pins,uint32_t ui32PinIO);
/****** 函数介绍 ******/
/* 作用 : 设置指定引脚的方向和模式。
 * 传入参数 : 
     * ui32Port : GPIO口的基地地址,GPIO_PORTx_BASE,x可为A,B,C,D,E,F,G,H
     * ui8Pins : GPIO_PIN_X,x可为1,2,3,4,5,6,7
     * ui32PinIO : GPIO_DIR_MODE_IN(设置为输入),
                    GPIO_DIR_MODE_OUT(设置为输出),
                    GPIO_DIR_MODE_HW(硬件控制)
 * 返回参数 : 无
*/


ROM_GPIOPinTypeGPIOInput()

(1)将引脚设置为输入。

(2)这个函数的底层是使用的GPIOPadConfigSet()和 GPIODirModeSet()实现的,如果要详细设置 GPIO 的状态(输出电流,上下拉模式),需要调用这两个函数详细设置,默认是不上下拉。

(3)如果用于输入,个人不建议直接调用ROM_GPIOPinTypeGPIOInput()函数,因为如果没有外接电路的上下拉,浮空输入会导致程序是未知的。

(4)以下为


void
GPIOPinTypeGPIOOutput(uint32_t ui32Port, uint8_t ui8Pins)
{
    //
    // Check the arguments.
    //
    ASSERT(_GPIOBaseValid(ui32Port));
    //
    // Set the pad(s) for standard push-pull operation.
    //
    GPIOPadConfigSet(ui32Port, ui8Pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    //
    // Make the pin(s) be outputs.
    //
    GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_OUT);
}

ROM_GPIOPinRead()

读取引脚电平

/****** 函数声明 ******/
//这个存放在ROM
int32_t ROM_GPIOPinRead(uint32_t ui32Port,uint8_t ui8Pins);
//这个是存放在flash
int32_t GPIOPinRead(uint32_t ui32Port,uint8_t ui8Pins);
/****** 函数介绍 ******/
/* 作用 : 读取引脚电平
 * 传入参数 : 
     * ui32Port : GPIO口的基地地址,GPIO_PORTx_BASE,x可为A,B,C,D,E,F,G,H
     * ui8Pins : GPIO_PIN_X,x可为1,2,3,4,5,6,7
 * 返回参数 : 无
*/
目录
相关文章
|
消息中间件 Java 开发工具
Spring Cloud【Finchley】实战-06使用/actuator/bus-refresh端点手动刷新配置 + 使用Spring Cloud Bus自动更新配置
Spring Cloud【Finchley】实战-06使用/actuator/bus-refresh端点手动刷新配置 + 使用Spring Cloud Bus自动更新配置
515 0
|
12月前
|
人工智能 编解码 虚拟化
See3D:智源研究院开源的无标注视频学习 3D 生成模型
See3D 是智源研究院推出的无标注视频学习 3D 生成模型,能够从大规模无标注的互联网视频中学习 3D 先验,实现从视频中生成 3D 内容。See3D 采用视觉条件技术,支持从文本、单视图和稀疏视图到 3D 的生成,并能进行 3D 编辑与高斯渲染。
409 13
See3D:智源研究院开源的无标注视频学习 3D 生成模型
|
自然语言处理 数据可视化 数据挖掘
Agent实操(四):Code Interpreter,生成二维码、视频、PDF转txt等炸裂功能
本文介绍Agent自带的Code Interpreter有哪些高级而实用的能力
Agent实操(四):Code Interpreter,生成二维码、视频、PDF转txt等炸裂功能
|
存储
【面试题】接雨水
【面试题】接雨水
196 0
|
开发工具 git 开发者
使用Git进行版本控制的最佳实践
【6月更文挑战第3天】使用Git进行版本控制的最佳实践包括:初始化配置Git仓库,设置个人信息和默认编辑器;提交信息要简洁明了,使用有意义的标题和描述;分支管理中,为新功能或修复创建分支,定期合并并保持主分支稳定;进行代码审查以保证质量;使用标签标记里程碑;忽略不必要的文件;定期备份仓库并学会恢复操作;不断学习和实践Git的高级用法。遵循这些实践可提升开发效率和代码质量。
|
物联网 网络架构 智能硬件
|
编解码 Linux API
【Camera基础(一)】Camera摄像头工作原理及整机架构
【Camera基础(一)】Camera摄像头工作原理及整机架构
|
算法
深度优先搜索(DFS)的基础理解与实现
深度优先搜索(DFS)的基础理解与实现
311 0
|
应用服务中间件 Windows
Tomcat控制台乱码问题修复
Tomcat控制台乱码问题修复