介绍
停止指定 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() 通常在以下情况使用:
- 完成 PWM 控制任务后(如蜂鸣器播放完一段声音);
- 需要临时关闭 PWM 输出(如暂停 LED 呼吸灯效果);
- 程序退出前清理资源。
示例:控制蜂鸣器短暂发声后停止
#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);
注意事项
- 依赖初始化:只能停止已通过
PwmInit()初始化且通过PwmStart()启动的通道,否则会返回错误。 - 通道对应关系:
port参数必须与启动时的通道一致(如启动了PWM0,就必须用PWM0作为参数调用PwmStop())。 - 多次调用安全性:对已停止的通道再次调用
PwmStop()通常会返回错误(非 0),但不会导致硬件异常,建议调用前判断通道状态(部分版本支持PwmGetState()等接口查询)。 - 与引脚功能的关系:
PwmStop()仅停止信号输出,不会改变引脚的功能配置(仍为 PWM 模式),若需切换为 GPIO 功能,需重新调用IoSetFunc()。
总结
PwmStop() 是 PWM 控制流程的收尾函数,用于在不需要 PWM 信号时终止输出,是实现“按需控制”“低功耗”的重要接口。使用时需确保与 PwmInit()、PwmStart() 配合的通道参数一致,以保证操作的正确性。