【凌智视觉模块】基于rv1106的GPIO基本使用
GPIO模块使用指南GPIO使用指南1. GPIO基本知识1.1 什么是GPIO1.2 GPIO的工作模式1.3 GPIO的状态2.API文档2.1 头文件2.2 GPIOMode枚举类型2.3 GPIOState枚举类型2.4 GPIOBase类2.4.1 头文件2.4.1 配置GPIO工作模式2.4.2 设置GPIO输出状态2.4.3 读取GPIO状态2.5 GPIO硬件映射3. 综合代码解析3.1 GPIO输入模式使用示例3.1.1 流程图3.1.2 代码解析3.1.2 代码实现3.2 GPIO输出模式使用示例3.2.1 流程图3.2.2 代码解析3.2.2 代码实现4.编译过程4.1 编译环境搭建4.2 Cmake介绍4.3 编译项目5. 运行效果展示5.1 准备工作5.2 运行过程6. 总结 **开发者生态** **问题反馈**GPIO使用指南在外设的使用过程中最基本的就是GPIO的使用。在本章节我们将介绍GPIO的使用。1. GPIO基本知识1.1 什么是GPIOGPIOGeneral Purpose Input/Output通用输入输出是微控制器或处理器上的一种引脚可以由用户配置为输入模式或输出模式用于与外部设备进行交互。输入模式GPIO引脚可以读取外部信号的状态高电平或低电平。输出模式GPIO引脚可以输出高电平或低电平信号驱动外部设备。1.2 GPIO的工作模式GPIO通常支持以下两种工作模式输入模式用于检测外部信号的状态例如按键输入。输出模式用于控制外部设备例如点亮LED灯。1.3 GPIO的状态GPIO的状态可以是以下三种之一低电平LOW表示逻辑0通常对应于0V。高电平HIGH表示逻辑1通常对应于供电电压例如3.3V或5V。错误状态ERROR表示GPIO操作失败。2.API文档2.1 头文件#include lockzhiner_vision_module/periphery/gpio/gpio.h2.2 GPIOMode枚举类型enum class GPIOMode { IN, /// 输入模式信号检测 OUT /// 输出模式设备驱动 };作用定义GPIO引脚的工作模式成员说明IN表示输入模式。OUT表示输出模式。2.3 GPIOState枚举类型enum class GPIOState { LOW 0, /// 低电平0V HIGH 1, /// 高电平3.3V/5V ERROR 2 /// 操作异常状态 };作用定义GPIO引脚的状态。成员说明LOW表示低电平0V。HIGH表示高电平3.3V/5V。ERROR操作异常状态2.4 GPIOBase类2.4.1 头文件#includelockzhiner_vision_module/periphery/gpio/gpio.h2.4.1 配置GPIO工作模式bool config(GPIOMode mode);参数modeGPIO的工作模式可以是GPIOMode::IN或GPIOMode::OUT。返回值true表示配置成功。false表示配置失败。2.4.2 设置GPIO输出状态bool Write(GPIOState state);参数stateGPIO的状态可以是GPIOState::LOW或GPIOState::HIGH。返回值true表示设置成功。false’表示设置失败。2.4.3 读取GPIO状态bool Read(GPIOState state);参数stateGPIO的状态用于存储读取到的状态。返回值true表示读取成功。false表示读取失败。2.5 GPIO硬件映射/*---- GPIO0系列 ----*/ using GPIO0A0 GPIOBase0, A, 0; /// 端口0A的第0脚 /*---- GPIO1系列 ----*/ using GPIO1C7 GPIOBase1, C, 7; /// 端口1C的第7脚 /*---- GPIO2系列 ----*/ using GPIO2A0 GPIOBase2, A, 0; /// 端口2A的第0脚 using GPIO2A1 GPIOBase2, A, 1; /// 端口2A的第1脚说明GPIO0A0: 表示端口组0端口A的第0脚GPIO1C7: 表示端口组1端口C的第7脚GPIO2A0: 表示端口组2端口A的第0脚3. 综合代码解析3.1 GPIO输入模式使用示例3.1.1 流程图开始│├── 包含必要的头文件│├── 主函数入口│├── 创建lockzhiner_vision_module::periphery::GPIO0A0对象gpio│├── 配置 GPIO 模式为输入模式 (GPIOMode::IN)│ ├── 成功 - 继续执行│ └── 失败 -│ └── 输出 “Failed to config gpio mode”│ └── 返回错误码 1│├── 定义 GPIO 状态变量state│├── 读取 GPIO 状态│ ├── 成功 - 继续执行│ └── 失败 -│ └── 输出 “Failed to read gpio mode”│ └── 返回错误码 1│├── 输出 GPIO 的状态值转换为uint8_t类型│└── 程序正常退出返回 03.1.2 代码解析创建GPIO0A0对象gpiolockzhiner_vision_module::periphery::GPIO0A0 gpio;配置GPIOState变量statelockzhiner_vision_module::periphery::GPIOState state;配置GPIO为输入模式if (!gpio.Config(lockzhiner_vision_module::periphery::GPIOMode::IN)) { std::cout Failed to config gpio mode std::endl; return 1; }读取GPIO状态,如果无法读取的话打印 Failed to read gpio mode。if (!gpio.Read(state)) { std::cout Failed to read gpio mode std::endl; return 1; }输出结果td::cout state is static_castuint8_t(state) std::endl;3.1.2 代码实现#include lockzhiner_vision_module/periphery/gpio/gpio.h #include iostream #include thread int main() { lockzhiner_vision_module::periphery::GPIO0A0 gpio; if (!gpio.Config(lockzhiner_vision_module::periphery::GPIOMode::IN)) { std::cout Failed to config gpio mode std::endl; return 1; } lockzhiner_vision_module::periphery::GPIOState state; if (!gpio.Read(state)) { std::cout Failed to read gpio mode std::endl; return 1; } std::cout state is static_castuint8_t(state) std::endl; return 0; }3.2 GPIO输出模式使用示例3.2.1 流程图开始│├── 包含必要的头文件│├── 主函数入口│├── 创建lockzhiner_vision_module::periphery::GPIO0A0对象gpio│├── 配置 GPIO 模式为输出模式 (GPIOMode::OUT)│ ├── 成功 - 继续执行│ └── 失败 -│ └── 输出 “Failed to config gpio mode”│ └── 返回错误码 1│├── 设置 GPIO 状态为高电平 (GPIOState::HIGH)│ ├── 成功 - 继续执行│ └── 失败 -│ └── 输出 “Failed to config gpio mode”│ └── 返回错误码 1│├── 循环等待 (计数器 i 从 0 到 9)│ ├── 输出当前等待进度i 值│ ├── 线程休眠 1 秒│ └── 计数器 i 自增│├── 设置 GPIO 状态为低电平 (GPIOState::LOW)│ ├── 成功 - 继续执行│ └── 失败 -│ └── 输出 “Failed to config gpio mode”│ └── 返回错误码 1│└── 程序正常退出返回 03.2.2 代码解析创建GPIO0A0对象gpiolockzhiner_vision_module::periphery::GPIO0A0 gpio;配置GPIOState变量statelockzhiner_vision_module::periphery::GPIOState state;配置GPIO为输出模式if (!gpio.Config(lockzhiner_vision_module::periphery::GPIOMode::OUT)) { std::cout Failed to config gpio mode std::endl; return 1; }输出高电平信号if (!gpio.Write(lockzhiner_vision_module::periphery::GPIOState::HIGH)) { std::cout Failed to write gpio mode std::endl; return 1; }3.2.2 代码实现#include lockzhiner_vision_module/periphery/gpio/gpio.h #include iostream #include thread int main() { lockzhiner_vision_module::periphery::GPIO0A0 gpio; if (!gpio.Config(lockzhiner_vision_module::periphery::GPIOMode::OUT)) { std::cout Failed to config gpio mode std::endl; return 1; } if (!gpio.Write(lockzhiner_vision_module::periphery::GPIOState::HIGH)) { std::cout Failed to config gpio mode std::endl; return 1; } for (int i 0; i 10; i) { std::cout Wait: i / 10 std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); } if (!gpio.Write(lockzhiner_vision_module::periphery::GPIOState::LOW)) { std::cout Failed to config gpio mode std::endl; return 1; } return 0; }4.编译过程4.1 编译环境搭建请确保你已经按照 开发环境搭建指南 正确配置了开发环境。同时以正确连接开发板。4.2 Cmake介绍# CMake最低版本要求 cmake_minimum_required(VERSION 3.10) project(test_gpio) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 定义项目根目录路径 set(PROJECT_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../..) message(PROJECT_ROOT_PATH ${PROJECT_ROOT_PATH}) include(${PROJECT_ROOT_PATH}/toolchains/arm-rockchip830-linux-uclibcgnueabihf.toolchain.cmake) # 定义 LockzhinerVisionModule SDK 路径 set(LockzhinerVisionModule_ROOT_PATH ${PROJECT_ROOT_PATH}/third_party/lockzhiner_vision_module_sdk) set(LockzhinerVisionModule_DIR ${LockzhinerVisionModule_ROOT_PATH}/lib/cmake/lockzhiner_vision_module) find_package(LockzhinerVisionModule REQUIRED) # 配置 GPIO 输出 Demo add_executable(Test-GPIO-Write GPIO_Write.cc) target_include_directories(Test-GPIO-Write PRIVATE ${LOCKZHINER_VISION_MODULE_INCLUDE_DIRS}) target_link_libraries(Test-GPIO-Write PRIVATE ${LOCKZHINER_VISION_MODULE_LIBRARIES}) # 配置 GPIO 读取 Demo add_executable(Test-GPIO-Read GPIO_Read.cc) target_include_directories(Test-GPIO-Read PRIVATE ${LOCKZHINER_VISION_MODULE_INCLUDE_DIRS}) target_link_libraries(Test-GPIO-Read PRIVATE ${LOCKZHINER_VISION_MODULE_LIBRARIES}) install( TARGETS Test-GPIO-Read TARGETS Test-GPIO-Write RUNTIME DESTINATION . )4.3 编译项目使用 Docker Destop 打开 LockzhinerVisionModule 容器并执行以下命令来编译项目# 进入Demo所在目录cd/LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule/Cpp_example/A02_GPIO# 创建编译目录rm-rfbuildmkdirbuildcdbuild# 配置交叉编译工具链exportTOOLCHAIN_ROOT_PATH/LockzhinerVisionModuleWorkSpace/arm-rockchip830-linux-uclibcgnueabihf# 使用cmake配置项目cmake..# 执行编译项目make-j8makeinstall5. 运行效果展示5.1 准备工作下载凌智视觉模块图片传输助手点击下载5.2 运行过程在凌智视觉模块中输入以下命令chmod777Test-GPIO-Read ./Test-GPIO-Readchmod777Test-GPIO-Write ./Test-GPIO-Write6. 总结通过上述内容我们介绍了GPIO的基本概念、API定义以及具体的使用示例。按照以下步骤您可以轻松地使用GPIO配置GPIO的工作模式输入或输出。根据需求读取或写入GPIO状态。检查操作是否成功并根据返回值处理异常。开发者生态订阅更新日志获取新模型支持问题反馈遇到技术问题请到凌智视觉模块官方仓库**凌智视觉模块** 提交Issue