同步操作将从 OpenHarmony/docs 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,是一种对模拟信号电平进行数字编码并将其转换为脉冲的技术。常用于马达控制、背光亮度调节等。
PWM接口定义了操作PWM设备的通用方法集合,包括:
表 1 PWM驱动API接口功能介绍
说明: 本文涉及的所有接口,仅限内核态使用,不支持在用户态使用。
使用PWM的一般流程如图1所示。
在操作PWM设备时,首先要调用PwmOpen获取PWM设备句柄,该函数会返回指定设备号的PWM设备句柄。
DevHandle PwmOpen(uint32_t num);
表 2 PwmOpen参数和返回值描述
假设系统中的PWM设备号为0,获取该PWM设备句柄的示例如下:
uint32_t num = 0; /* PWM设备号 */
DevHandle pwm = NULL; /* PWM设备句柄 /
/* 获取PWM设备句柄 */
pwm = PwmOpen(num);
if (pwm == NULL) {
HDF_LOGE("PwmOpen: pwm%d failed", num);
return;
}
int32_t PwmSetPeriod(DevHandle handle, uint32_t period);
表 3 PwmSetPeriod参数和返回值描述
int32_t ret;
uint32_t period = 1000; /* 周期1000纳秒 */
ret = PwmSetPeriod(pwm, period); /* 设置PWM周期 */
if (ret != 0) {
HDF_LOGE("PwmSetPeriod: failed, ret %d", ret);
}
int32_t PwmSetDuty(DevHandle handle, uint32_t duty);
表 4 PwmSetDuty参数和返回值描述
int32_t ret;
uint32_t duty = 500; /* 占空比500纳秒 */
ret = PwmSetDuty(pwm, duty); /* 设置PWM占空比 */
if (ret != 0) {
HDF_LOGE("PwmSetDuty: failed, ret %d", ret);
}
int32_t PwmSetPolarity(DevHandle handle, uint8_t polarity);
表 5 PwmSetPolarity参数和返回值描述
int32_t ret;
uint8_t polarity = PWM_INVERTED_POLARITY; /* 反转极性 */
ret = PwmSetPolarity(pwm, polarity); /* 设置PWM反转极性 */
if (ret != 0) {
HDF_LOGE("PwmSetPolarity: failed, ret %d", ret);
}
int32_t PwmEnable(DevHandle handle);
表 6 PwmEnable参数和返回值描述
int32_t ret;
ret = PwmEnable(pwm); /* 使能PWM */
if (ret != 0) {
HDF_LOGE("PwmEnable: failed, ret %d", ret);
}
int32_t PwmDisable(DevHandle handle);
表 7 PwmDisable参数和返回值描述
int32_t ret;
ret = PwmDisable(pwm); /* 禁用PWM */
if (ret != 0) {
HDF_LOGE("PwmDisable: failed, ret %d", ret);
}
int32_t PwmGetConfig(DevHandle handle, struct PwmConfig *config);
表 8 PwmGetConfig参数和返回值描述
int32_t ret;
struct PwmConfig config= {0}; /* PWM配置信息 */
ret = PwmGetConfig(pwm, &config); /* 获取PWM设备配置信息 */
if (ret != 0) {
HDF_LOGE("PwmGetConfig: failed, ret %d", ret);
}
int32_t PwmSetConfig(DevHandle handle, struct PwmConfig *config);
表 9 PwmSetConfig参数和返回值描述
int32_t ret;
struct PwmConfig config= {0}; /* PWM配置信息 */
config.duty = 500; /* 占空比500纳秒 */
config.period = 1000; /* 周期1000纳秒 */
config.number = 0; /* 一直输出方波 */
config.polarity = PWM_NORMAL_POLARITY; /* 正常极性 */
ret = PwmSetConfig(pwm, &config); /* 设置PWM设备配置信息 */
if (ret != 0) {
HDF_LOGE("PwmSetConfig: failed, ret %d\n", ret);
}
void PwmClose(DevHandle handle);
该函数会释放掉由PwmClose申请的资源。
表 10 PwmClose参数描述
PwmClose(pwm); /* 释放PWM设备句柄 */
PWM设备完整的使用示例如下所示,首先获取PWM设备句柄,然后设置PWM设备配置信息,使能PWM,最后释放PWM设备句柄。
#include "hdf_log.h"
#include "osal_time.h"
#include "pwm_if.h"
void PwmTestSample(void)
{
int32_t ret;
struct PwmConfig config; /* PWM配置信息 */
DevHandle pwm = NULL; /* PWM设备句柄 */
pwm = PwmOpen(0); /* 获取PWM设备句柄 */
if (pwm == NULL) {
HDF_LOGE("PwmOpen: pwm0 failed");
return;
}
/* 获取PWM设备配置信息 */
ret = PwmGetConfig(pwm, &config);
if (ret != 0) {
HDF_LOGE("PwmGetConfig: failed, ret %d\n", ret);
goto err;
}
config.duty = 500; /* 占空比500纳秒 */
config.period = 1000; /* 周期1000纳秒 */
/* 设置PWM设备配置信息 */
ret = PwmSetConfig(pwm, &config);
if (ret != 0) {
HDF_LOGE("PwmSetConfig: failed, ret %d\n", ret);
goto err;
}
/* 使能PWM */
ret = PwmEnable(pwm);
if (ret != 0) {
HDF_LOGE("PwmEnable: failed, ret %d\n", ret);
goto err;
}
/* 睡眠10秒 */
OsalSleep(10);
/* 禁用PWM */
ret = PwmDisable(pwm);
if (ret != 0) {
HDF_LOGE("PwmDisable: failed, ret %d\n", ret);
goto err;
}
err:
/* 释放PWM设备句柄 */
PwmClose(pwm);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。