一、描述你遇到的问题
示例代码直接给数值,单位是什么?
二、你具体做的所有步骤结果截图
通过uapi_pwm_get_frequency获取频率40MHz,转换0.025us
这里会触发检测不超过0xFFFF,我想要周期为30ms的10ms高电平的PWM波,该怎么获取?
示例代码直接给数值,单位是什么?
通过uapi_pwm_get_frequency获取频率40MHz,转换0.025us
这里会触发检测不超过0xFFFF,我想要周期为30ms的10ms高电平的PWM波,该怎么获取?
根据您的需求,您需要生成一个周期为 30ms、高电平时间为 10ms 的 PWM 波。以下是如何配置的步骤:
1.计算周期和占空比:
周期为 30ms,高电平时间为 10ms,因此占空比为 10ms / 30ms = 1/3。
2.配置 PWM 参数:
使用uapi_pwm_open接口打开 PWM 通道,并配置low_time和high_time。
示例代码如下:
#include "pwm.h"
void configure_pwm() {
pwm_channel_t channel = 0; // 选择PWM通道
pwm_config_t cfg = {
.low_time = 20000, // 20ms低电平时间
.high_time = 10000, // 10ms高电平时间
.cycles = 0, // 循环次数,0表示无限循环
.repeat = true // 重复输出
};
uapi_pwm_init();
uapi_pwm_open(channel, &cfg);
uapi_pwm_start(channel);
}
请确保在调用uapi_pwm_start之前,已经正确配置了low_time和high_time,并且这些值不超过 0xFFFF。
非也,照你这么配置得出的PWM周期为0.3751ms
在这可以看出他是将高低时间相加作为分频系数,而我之前也问过分频系数的高十六位配置失败,也就是说分频系数最大0XFFFF,但是根据我测量的数据,大于0XFFF的分频系数会缩小一半,连周期1ms的PWM都获取不了,目前只想到用模拟IO来实现,但会占用cpu,求解