Q群:
电话:
邮箱:
地址:
函数 | 说明 |
---|---|
os_device_find() | 查找PWM设备 |
os_device_control() | 控制PWM设备,可以设置周期、占空比、开关设备 |
该函数根据PWM设备名查找对应的PWM设备设备,函数原型如下:
os_device_t *os_device_find(const char *name);
参数 | 说明 |
---|---|
name | 设备名称 |
返回 | 说明 |
设备指针 | 查找到对应设备将返回相应的设备指针 |
OS_NULL | 没有找到设备 |
该函数用于控制PWM设备参数,函数原型如下:
os_err_t os_device_control(os_device_t *dev, int cmd, void *arg);
参数 | 说明 |
---|---|
dev | 设备指针 |
cmd | 命令控制字 |
arg | 控制的参数 |
返回 | 说明 |
OS_EOK | 函数执行成功 |
其他错误码 | 失败 |
脉冲编码器支持的命令控制字如下所示:
控制字 | 说明 |
---|---|
OS_PWM_CMD_ENABLE | 启动PWM设备 |
OS_PWM_CMD_DISABLE | 停止PWM设备 |
OS_PWM_CMD_SET_PERIOD | 设置PWM周期 |
OS_PWM_CMD_SET_PULSE | 设置占空比 |
注意事项
PWM设备的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:
#include <drv_cfg.h>
#include <os_device.h>
#include <os_clock.h>
#include <stdlib.h>
#ifdef OS_USING_SHELL
#include <shell.h>
#endif
int pwm_led_sample(int argc, char **argv)
{
os_err_t ret = OS_EOK;
os_uint32_t count = 0;
os_uint32_t period = 5000000;
os_uint32_t dir = 1;
os_uint32_t pulse = 0;
os_uint32_t channel = 0;
char *dev_name;
struct os_device *pwm_dev = OS_NULL;
if (argc != 3)
{
os_kprintf("usage: pwm_led_sample <dev> <channel>\r\n");
os_kprintf(" pwm_led_sample pwm_tim1 1 \r\n");
return -1;
}
dev_name = argv[1];
channel = strtol(argv[2], OS_NULL, 0);
pwm_dev = os_device_find(dev_name);
if (pwm_dev == OS_NULL)
{
os_kprintf("pwm sample run failed! can't find %s device!\n", dev_name);
return OS_ERROR;
}
os_device_control(pwm_dev, OS_PWM_CMD_SET_PERIOD, period);
os_device_control(pwm_dev, OS_PWM_CMD_SET_PULSE, pulse);
os_device_control(pwm_dev, OS_PWM_CMD_ENABLE, &channel);
while (count < 6)
{
os_task_mdelay(10);
if (dir)
{
pulse += 100000;
}
else
{
pulse -= 100000;
}
if (pulse >= period)
{
dir = 0;
count++;
os_kprintf("PWM testing %d %d!\n", period, count);
}
if (0 == pulse)
{
dir = 1;
}
ret = os_device_control(pwm_dev, OS_PWM_CMD_SET_PULSE, pulse);
if (ret != OS_EOK)
{
if (ret == OS_ENOSYS)
{
os_kprintf("PWM channel not exist!\n");
return ret;
}
}
}
return ret;
}
/* Export to msh command list */
SH_CMD_EXPORT(pwm_led_sample, pwm_led_sample, "test_pwm_led_sample!");
运行结果如下:
sh />pwm_led_sample
PWM testing 5000000 0!
PWM testing 5000000 1!
PWM testing 5000000 2!
PWM testing 5000000 3!
PWM testing 5000000 4!
PWM testing 5000000 5!
PWM testing 5000000 6!