物联网Lora模块从入门到精通(四)对某些端口的初始化

news/2024/7/5 1:54:21

一、前言

        由于程序设计开发具有的不确定性,我们常常需要初始化某些特定的引脚,并读取引脚电平状态或向引脚输出高低电平。

二、代码实现

        快速找到端口的初始化语句:

        首先,找到board.c文件,在下图的位置,我们可以看到关于LED灯的端口的初始化语句。

        通过 Go Definition功能或者直接找到gpio.c文件,可以看到具体的实现方法:

/*
 / _____)             _              | |
( (____  _____ ____ _| |_ _____  ____| |__
 \____ \| ___ |    (_   _) ___ |/ ___)  _ \
 _____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
    (C)2013 Semtech

Description: Generic GPIO driver implementation

Comment: Relies on the specific board GPIO implementation as well as on
         IO expander driver implementation if one is available on the target
         board.

License: Revised BSD License, see LICENSE.TXT file include in the project

Maintainer: Miguel Luis and Gregory Cristian
*/
#include "board.h"

#include "gpio-board.h"


void GpioInit( Gpio_t *obj, PinNames pin, PinModes mode,  PinConfigs config, PinTypes type, uint32_t value )
{
	GpioMcuInit( obj, pin, mode, config, type, value );
}

void GpioSetInterrupt( Gpio_t *obj, IrqModes irqMode, IrqPriorities irqPriority, GpioIrqHandler *irqHandler )
{
    GpioMcuSetInterrupt( obj, irqMode, irqPriority, irqHandler );
}

void GpioRemoveInterrupt( Gpio_t *obj )
{
    GpioMcuRemoveInterrupt( obj );
}

void GpioWrite( Gpio_t *obj, uint32_t value )
{
    GpioMcuWrite( obj, value );
}

void GpioToggle( Gpio_t *obj )
{
    GpioMcuToggle( obj );
}

uint32_t GpioRead( Gpio_t *obj )
{
    return GpioMcuRead( obj );
}

        本次,我们主要使用的方法为:GpioInit()

        该方法有五个参数,我们依次展开来看。

        参数一:Gpio_t *obj :我们在使用时需要先创建一个Gpio_t类型的变量,并在初始化时传入,方便我们后面去对其操作。

        参数二:PinNames pin:此处我们填写需要操作的端口,例如PB_2。

        参数三:PinModes mode:此处我们可以填常见的两种,即PIN_INPUT(输入模式),PIN_OUTPUT(输出模式),而PIN_ALTERNATE_FCT与PIN_ANALOGIC暂时不需要我们关注。

        参数四:PinConfigs config:此处我们一般写PIN_PUSH_PULL(推挽)即可。

        参数五:PinTypes type:此处我们根据需要选择PIN_NO_PULL,PIN_PULL_UP,PIN_PULL_DOWN即可。

        参数六:填0即可。

        代码示例:

        下面展示读取PB_2电平,低电平点亮LED1的操作:

 

Gpio_t Device;
int main( void )
{
    Init();
		GpioInit(&Device,PB_2,PIN_INPUT,PIN_PUSH_PULL,PIN_PULL_UP,0);
    while( 1 )
    {
				if(GpioRead(&Device)==0)
					GpioWrite(&Led1,0);
				else
					GpioWrite(&Led1,1);
    }
}

http://lihuaxi.xjx100.cn/news/1230357.html

相关文章

数据分析手册-R语言

1 数据准备 1.1 数据录入 1.1.1 R中导入数据 (1)导入excel 1.2 修改工作路径 https://wenku.baidu.com/view/2785ff37b4360b4c2e3f5727a5e9856a561226c9.html 1.3 如何计算样本量 https://www.bilibili.com/video/BV19t411u7TW?spm_id_from333.…

运营-20.产品社区化和内容化

产品社区化和内容化 为什么现在很多产品都在往社区化、内容化发展? 1.拓展产品线,满足用户的多元需求 分享、交流、炫耀、虚荣,这些是人类永恒的情感需求,社区是一个能很好的满足这些需求的工具; 2.打造归属感&…

内存储器题目

1.和外存储器相比,内存储器的特点是 容量小,速度快,成本高 内存储器是指计算机的主存储器和位于CPU与主存储器之间的高速缓冲存储器cache.外存储器是指计算机的辅助存储器,包括硬盘、软盘、光盘等。 2. 640KB的内存容量为: 655360…

Spring Cloud - 带你认识微服务,简单demo实现服务拆分及远程调用

目录 一、微服务 1.1、简介 1.2、架构工作原理 1.3、架构特点 1.4、简单了解 SpringCloud 二、服务拆分和远程调用 2.1、服务拆分 2.2、微服务远程调用 2.2.1、远程调用分析 2.2.2、具体调用步骤 三、小结 一、微服务 1.1、简介 微服务是一种架构风格,…

【大学计算机技术】测试 2

文章目录 选择题 选择题 下列有关PC机硬盘存储器的叙述错误的是( )。 A. 硬盘上的数据块要用柱面号、扇区号和磁头号这三个参数来定位 B. 目前硬盘一般都含有DRAM芯片构成的高速缓存(Cache) C. 目前硬盘与主机的接口大多为SATA接口 D. 硬盘容量的增加主要…

设计模式-接口隔离原则

一般的系统设计都需要系统设计架构图,图中会将系统整体按照几个不同维度的模块进行拆分,以达到模块之间高内聚、低耦合的效果,协同完成系统的各项功能。同样,在应用程序设计的时候,我们也需要对模块、接口进行拆分&…

基于 Quivr 搭建个人知识库

目录 Quivr介绍 Quivr特性 Quivr演示 Demo with GPT3.5: Demo of the new version: Quivr实战 Quiv 使用的主要技术 Quiv 实践依赖 创建Supabase项目 部署Quiv项目 第一步:现在源码 第二步:设置环境变量 第三步:执行sql 第…

如何使用Vue的异步更新机制?

首先,让我们来了解一下Vue的异步更新机制是什么。简单来说,当Vue的数据发生变化时,它并不会立即更新页面,而是将更新操作放在一个队列中,等到浏览器空闲时再批量执行这些更新操作。这样做的好处是,可以减少…