OpenHarmony鸿蒙硬件-Kaihong_Hi3861_温湿度感应板-让风扇转动 作者:马育民 • 2026-03-29 16:21 • 阅读:10002 ## 一、硬件分工 1. **GPIO12**:控制板载继电器,负责风扇**总电源通断** 2. **GPIO8**:控制风扇二级使能开关,负责风扇运行放行 3. 必要条件:两个引脚同时置高电平,风扇才能正常转动 ## 二、代码执行流程 1. **系统自动入口** 上电后 `SYS_RUN()` 自动加载运行风扇主函数,程序启动。 2. **全局GPIO初始化** 调用 `GpioInit()`,初始化芯片GPIO外设时钟与底层驱动,为引脚配置做基础准备。 3. **引脚功能重映射** 通过 `IoSetFunc()`,将GPIO8、GPIO12从复用功能(通信引脚)切换为**普通GPIO控制功能**,解除外设占用。 4. **设置引脚输出方向** 通过 `GpioSetDir()`,把两个引脚配置为**输出模式**,让引脚具备向外输出高低电平的能力。 5. **电平输出触发硬件** 两个引脚同时输出高电平: - GPIO12高电平 → 继电器吸合,接通风扇外部总电源 - GPIO8高电平 → 打开风扇内部控制使能 双条件同时满足,风扇正式启动运转。 # 代码 ``` #include #include #include "wifiiot_gpio.h" #include "wifiiot_gpio_ex.h" #include "ohos_init.h" void Fan_Run(void) { GpioInit(); // GPIO8 控制散热风扇开关 // 把 GPIO8 引脚设置成 “普通 GPIO 功能” IoSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO); // 把 GPIO8 设置成 “输出模式” GpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_GPIO_DIR_OUT); // GPIO12控制继电器开关(是散热风扇电源) // 把 GPIO12 引脚设置成 “普通 GPIO 功能” IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO); // 把 GPIO12 设置成 “输出模式” GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT); // ==================== // 同时打开两个引脚 // ==================== GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_8, 1); GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1); printf("Fan is running!\n"); // 死循环延时挂起任务,防止程序退出,让风扇持续保持运行状态。 while (1) { usleep(1000000); } } SYS_RUN(Fan_Run); ``` 原文出处:http://www.malaoshi.top/show_1GW32COzyCFb.html