littlebot
Published on 2025-04-09 / 4 Visits
0

【源码】基于C语言的GPIO输出口控制扩展系统

项目简介

IOOUT 是一个 GPIO 输出口控制扩展模块,可依据用户所需的周期、占空比和总时间,更便捷地管理多个 IO 口时序。它提供启动、暂停、设置和停止等接口,且支持内存管理的选用。

项目的主要特性和功能

  1. 多 IO 口管理:支持对多个 IO 口的时序进行管理。
  2. 丰富接口:提供启动、暂停、设置和停止接口,方便控制 IO 口输出。
  3. 内存管理可选:用户可根据需求选择是否使用内存管理,并配置相应接口函数。
  4. RTT 驱动支持:支持 RTT 驱动,配置后可将端口注册到 RTT 的设备列表,使用 rt_devcie 的通用函数调用该设备。

安装使用步骤

移植

  1. 定时调用:设置 IOOUT_BASE_TIME,初始化一个定时器,定时周期和 IOOUT_BASE_TIME 保持一致。在定时器中断中,调用接口函数 ioout_loop()。示例: ```c

define IOOUT_BASE_TIME 10

// 定时器中断中 ioout_loop(); 2. 配置内存管理:选择是否使用内存管理,并配置内存管理接口函数。示例:c

define IOOUT_USE_MEM

ifdef IOOUT_USE_MEM

void ioout_malloc(uint32_t nbytes) { //add malloc } void ioout_free (void ptr) { //add free }

endif

3. 配置 RTT 驱动:选择是否使用 RTT 驱动,配置 RTT 驱动必须打开 IOOUT_USE_MEM。示例:c

define IOOUT_USE_RT_DEVICE

```

API 使用

  1. 端口函数初始化:查找空闲端口并初始化,根据是否使用内存管理有不同的调用方式。
    • 使用内存管理: c int ioout_init(ioout_t *handle, void(*ioout_cb)(uint8_t));
    • 不使用内存管理: c int ioout_init(ioout_t handle, void(*ioout_cb)(uint8_t));
  2. 删除:将端口删除。
    • 使用内存管理: c int ioout_kill(ioout_t *handle);
    • 不使用内存管理: c int ioout_kill(ioout_t handle);
  3. 时间参数设置:设置端口时间并启动,时间参数以 ms 为单位,参数必须是 IOOUT_BASE_TIME 时间的整数倍。 c int ioout_set(ioout_t handle, ioout_setvalue_t setvalue);
  4. 停止端口输出:停止端口输出并复位端口参数。 c int ioout_stop(ioout_t handle);
  5. 暂停端口输出:停止端口输出,端口参数不复位。 c int ioout_pause(ioout_t handle);
  6. 启动端口输出:启动端口输出,端口参数不复位。 c int ioout_start(ioout_t handle);

RTT 设备驱动使用

使用端口注册函数将端口注册到 RTT 的设备列表,然后使用 rt_devcie 的通用函数调用该设备。使用 ioout_rtt 驱动需要打开 IOOUT_USE_MEM 和 IOOUT_USE_RT_DEVICE 两个定义。 c rt_err_t rt_hw_ioout_device_init(const char *device_name, void(*ioout_cb)(uint8_t));

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】