一、硬件分工
- GPIO12:控制板载继电器,负责风扇总电源通断
- GPIO8:控制风扇二级使能开关,负责风扇运行放行
- 必要条件:两个引脚同时置高电平,风扇才能正常转动
二、代码执行流程
系统自动入口
上电后SYS_RUN()自动加载运行风扇主函数,程序启动。全局GPIO初始化
调用GpioInit(),初始化芯片GPIO外设时钟与底层驱动,为引脚配置做基础准备。引脚功能重映射
通过IoSetFunc(),将GPIO8、GPIO12从复用功能(通信引脚)切换为普通GPIO控制功能,解除外设占用。设置引脚输出方向
通过GpioSetDir(),把两个引脚配置为输出模式,让引脚具备向外输出高低电平的能力。电平输出触发硬件
两个引脚同时输出高电平:
- GPIO12高电平 → 继电器吸合,接通风扇外部总电源
- GPIO8高电平 → 打开风扇内部控制使能
双条件同时满足,风扇正式启动运转。
代码
#include <stdio.h>
#include <unistd.h>
#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);