介绍关于PWM初始化、开始输出、停止输出、修改参数、关闭等功能所调用的一些抽象函数。

API列表

函数名称 功能描述
hal_pwm_init 初始化指定PWM
hal_pwm_start 开始输出指定PWM
hal_pwm_stop 停止输出指定PWM
hal_pwm_para_chg 修改指定PWM参数
hal_pwm_finalize 关闭指定PWM

hal_pwm_init

定义描述
定义 描述
函数原型 int32_t hal_pwm_init(pwm_dev_t *pwm)
描述 初始化指定PWM
参数 pwm:PWM设备描述,定义需要初始化的PWM参数
返回值 返回成功或失败,返回0表示PWM初始化成功,非0表示失败

调用示例

具体请参见使用示例

hal_pwm_start

定义描述
定义 描述
函数原型 int32_t hal_pwm_start(pwm_dev_t *pwm)
描述 开始输出指定PWM
参数 pwm:PWM设备描述
返回值 返回成功或失败,返回0表示PWM开始输出成功,非0表示失败

调用示例

具体请参见使用示例

hal_pwm_stop

定义描述
定义 描述
函数原型 int32_t hal_pwm_stop(pwm_dev_t *pwm)
描述 停止输出指定PWM
参数 pwm:PWM设备描述
返回值 返回成功或失败,返回0表示PWM停止输出成功,非0表示失败

调用示例

具体请参见使用示例

hal_pwm_para_chg

定义描述
定义 描述
函数原型 int32_t hal_pwm_para_chg(pwm_dev_t *pwm, pwm_config_t para)
描述 修改指定PWM参数,立即生效
参数
  • pwm:PWM设备描述
  • para:新配置参数
返回值 返回成功或失败,返回0表示PWM参数修改成功,非0表示失败

调用示例

具体请参见使用示例

hal_pwm_finalize

定义描述
定义 描述
函数原型 int32_t hal_pwm_finalize(pwm_dev_t *pwm)
描述 关闭指定PWM
参数 pwm:PWM设备描述
返回值 返回成功或失败,返回0表示PWM关闭成功,非0表示失败

调用示例

具体请参见使用示例

pwm_dev_t数据结构

typedef struct {
    uint8_t      port;   /* pwm port */
    pwm_config_t config; /* spi config */
    void        *priv;   /* priv data */
} pwm_dev_t;

pwm_config_t数据结构

typedef struct {
    float    duty_cycle; /* the pwm duty_cycle */
    uint32_t freq;       /* the pwm freq */
} pwm_config_t;

使用示例

#include <aos/hal/pwm.h>

#define PWM1_PORT_NUM 1

/* define dev */
pwm_dev_t pwm1;

int application_start(int argc, char *argv[])
{
    int ret = -1;
    pwm_config_t pwm_cfg;
    static int count = 0;

    /* pwm port set */
    pwm1.port = PWM1_PORT_NUM;

    /* pwm attr config */
    pwm1.config.duty_cycle = 0.5f; /* 1s */
    pwm1.config.freq       = 300000; /* 1s */

    /* init pwm1 with the given settings */
    ret = hal_pwm_init(&pwm1);
    if (ret != 0) {
        printf("pwm1 init error !\n");
        return -1;
    }

    /* start pwm1 */
    ret = hal_pwm_start(&pwm1);
    if (ret != 0) {
        printf("pwm1 start error !\n");
        hal_pwm_finalize(&pwm1);
        return -1;
    }

    while(1) {

        /* change the duty cycle to 30% */
        if (count == 5) {
            memset(&pwm_cfg, 0, sizeof(pwm_config_t));
            pwm_cfg.duty_cycle = 0.3f;
            pwm_cfg.freq = pwm1.config.freq;
            ret = hal_pwm_para_chg(&pwm1, pwm_cfg);
            if (ret != 0) {
                printf("pwm1 para change error !\n");
            }
        }

        if (count == 20) {
            break;
        }

        /* sleep 1000ms */
        aos_msleep(1000);
        count++;
    }
    /* stop and finalize pwm1 */
    hal_pwm_stop(&pwm1);
    hal_pwm_finalize(&pwm1);
}
说明
  • port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现。
  • 移植前,新建hal_pwm_xxmcu.chal_pwm_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_pwm_xxmcu.c中实现所需要的hal函数,hal_pwm_xxmcu.h中放置相关宏定义。具体请参见platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal_pwm_stm32l4.c