默认低电平时,脉冲可以先输出高电平再输出低电平吗

[复制链接]
查看870 | 回复7 | 2024-7-7 15:14:13 | 显示全部楼层 |阅读模式
引脚设置的是默认低电平,设置脉冲时都是先低电平再高电平输出。那么请问可以做到先输出高电平再输出低电平吗
回复

使用道具 举报

爱笑 | 2024-7-8 08:36:53 | 显示全部楼层
马上抓个技术给你解决!
用心做好保姆工作
回复 支持 反对

使用道具 举报

Ai-Thinker小泽 | 2024-7-8 09:17:33 | 显示全部楼层
SDK里倒没看到输出极性的选项,只有占空比持续时间高或低的计算方式。
回复 支持 反对

使用道具 举报

Ai-Thinker小泽 | 2024-7-8 09:22:00 | 显示全部楼层
Ai-Thinker小泽 发表于 2024-7-8 09:17
SDK里倒没看到输出极性的选项,只有占空比持续时间高或低的计算方式。

在uni_hal_pwm.h里看到了,不过一般都是用user接口,你用hal的也行,
extern PWM_ERROR_CODE uni_hal_pwm_init(TIMER_INDEX TimerIdx,uint8_t PwmIoSel,PWM_StructInit *PWMParam);


typedef struct __PWM_StructInit
{
    uint8_t     CounterMode;        //PWM计数模式,参数取值范围 #PWM_COUNTER_MODE   
    uint8_t     OutputType;         //PWM输出类型,参数取值为#PWM_OUTPUT_TYPE   
    uint32_t    FreqDiv;            //PWM频率与系统时钟的分频比,取值范围[1, PWM_MAX_FREQ_DIV_VALUE]   
    uint16_t    Duty;               //占空比,取值范围[0~100]对应占空比为[0%~100%]   
    bool        DMAReqEnable;       //是否使能DMA从Mem搬运占空比到外设中,参数取值: 1 -- 使能DMA请求; 0 -- 禁能DMA请求
}PWM_StructInit;


/**
* @brief  PWM输出类型定义  
*/
typedef enum __PWM_OUTPUT_TYPE
{
    PWM_OUTPUT_FORCE_LOW    = 4,      //强制输出低电平
    PWM_OUTPUT_FORCE_HIGH   = 5,      //强制输出高电平
    PWM_OUTPUT_SINGLE_1     = 6,      //标准输出:Duty为高脉冲占空比   
    PWM_OUTPUT_SINGLE_2     = 7,      //标准输出:Duty为负脉冲占空比  
    PWM_OUTPUT_ONE_PULSE        = 8              //输出一个脉冲后结束
}PWM_OUTPUT_TYPE;



回复 支持 反对

使用道具 举报

Ai-Thinker小泽 | 2024-7-8 09:30:07 | 显示全部楼层
Ai-Thinker小泽 发表于 2024-7-8 09:22
在uni_hal_pwm.h里看到了,不过一般都是用user接口,你用hal的也行,
extern PWM_ERROR_CODE uni_hal_pwm_ ...

又研究了下它的user驱动

/**
*@brief PWM初始化
*@param num PWM管脚号
*@param hz 频率
*@param is_high_duty \a TRUE :占空比用高电平持续时间计算; \a FALSE :占空比用低电平持续时间计算
*@retval 0  操作成功
*@retval -1 操作失败
*/
int user_pwm_init(USER_PWM_NUM num, uni_u32 hz, uni_bool is_high_duty);

最后一个参数设置为false好像就行
  if (is_high_duty) {
    g_timer_pwm[timer].PWMParam.OutputType = PWM_OUTPUT_SINGLE_1;
  } else {
    g_timer_pwm[timer].PWMParam.OutputType = PWM_OUTPUT_SINGLE_2;
  }

驱动里也是选择标准输出的负脉冲占空比

typedef enum __PWM_OUTPUT_TYPE
{
    PWM_OUTPUT_FORCE_LOW    = 4,      //强制输出低电平
    PWM_OUTPUT_FORCE_HIGH   = 5,      //强制输出高电平
    PWM_OUTPUT_SINGLE_1     = 6,      //标准输出:Duty为高脉冲占空比   
    PWM_OUTPUT_SINGLE_2     = 7,      //标准输出:Duty为负脉冲占空比  
    PWM_OUTPUT_ONE_PULSE        = 8              //输出一个脉冲后结束
}PWM_OUTPUT_TYPE;
回复 支持 反对

使用道具 举报

浅末哈哈 | 2024-7-8 10:22:29 | 显示全部楼层
学习一下
回复

使用道具 举报

WT_0213 | 2024-7-8 10:52:15 | 显示全部楼层
泽哥好强呀
回复 支持 反对

使用道具 举报

王明明 | 2024-7-9 06:48:52 | 显示全部楼层
点赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则