OpenHarmony API-PwmStop()停止 PWM 通道输出

介绍

停止指定 PWM 通道输出的函数,与 PwmStart() 配合使用,用于终止 PWM 信号输出,释放相关硬件资源

头文件

\\base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_pwm.h
#include "wifiiot_pwm.h"

定义

/**
 * @brief 停止指定 PWM 通道的信号输出
 * @param port:需要停止的 PWM 通道(来自 WifiIotPwmPort 枚举,如 WIFI_IOT_PWM_PORT_PWM0)
 * @return 0 表示成功;非 0 表示失败(如通道未初始化、参数无效等)
 */
unsigned int PwmStop(WifiIotPwmPort port);

说明

核心作用

  • 终止 PWM 信号:停止指定通道的脉冲输出,使对应引脚恢复到默认电平(通常为低电平,具体取决于硬件设计)。
  • 释放资源:告知硬件模块停止该通道的工作,可降低功耗(尤其在不需要持续输出 PWM 信号的场景)。

典型使用场景

PwmStop() 通常在以下情况使用:

  1. 完成 PWM 控制任务后(如蜂鸣器播放完一段声音);
  2. 需要临时关闭 PWM 输出(如暂停 LED 呼吸灯效果);
  3. 程序退出前清理资源。

示例:控制蜂鸣器短暂发声后停止

#include "wifiiot_pwm.h"
#include "wifiiot_gpio.h"
#include "ohos_init.h"
#include "unistd.h"

void BeeperControl(void) {
    // 1. 配置引脚为 PWM 功能(PWM0 对应 GPIO12)
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_PWM0_OUT);

    // 2. 初始化 PWM0 通道
    PwmInit(WIFI_IOT_PWM_PORT_PWM0);

    // 3. 启动 PWM 输出(1000Hz,50% 占空比,蜂鸣器发声)
    PwmStart(WIFI_IOT_PWM_PORT_PWM0, 1000, 500);
    printf("蜂鸣器开始发声...\n");

    // 4. 持续 2 秒后停止
    usleep(2000000);  // 延时 2 秒
    unsigned int ret = PwmStop(WIFI_IOT_PWM_PORT_PWM0);
    if (ret == 0) {
        printf("蜂鸣器已停止\n");
    } else {
        printf("停止 PWM 失败,错误码:%u\n", ret);
    }
}

SYS_RUN(BeeperControl);

注意事项

  1. 依赖初始化:只能停止已通过 PwmInit() 初始化且通过 PwmStart() 启动的通道,否则会返回错误。
  2. 通道对应关系:port 参数必须与启动时的通道一致(如启动了 PWM0,就必须用 PWM0 作为参数调用 PwmStop())。
  3. 多次调用安全性:对已停止的通道再次调用 PwmStop() 通常会返回错误(非 0),但不会导致硬件异常,建议调用前判断通道状态(部分版本支持 PwmGetState() 等接口查询)。
  4. 与引脚功能的关系:PwmStop() 仅停止信号输出,不会改变引脚的功能配置(仍为 PWM 模式),若需切换为 GPIO 功能,需重新调用 IoSetFunc()。

总结

PwmStop() 是 PWM 控制流程的收尾函数,用于在不需要 PWM 信号时终止输出,是实现“按需控制”“低功耗”的重要接口。使用时需确保与 PwmInit()、PwmStart() 配合的通道参数一致,以保证操作的正确性。


原文出处:/show_1GW1wvdPezSb.html