OpenHarmony API-PwmStop()停止 PWM 通道输出 作者:马育民 • 2025-09-29 13:16 • 阅读:10011 # 介绍 停止指定 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. 程序退出前清理资源。 ### 示例:控制蜂鸣器短暂发声后停止 ```c #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()` 配合的通道参数一致,以保证操作的正确性。 原文出处:http://www.malaoshi.top/show_1GW1wvdPezSb.html