打印
[AIROC™ 蓝牙]

【英飞凌CYW20829测评】3、PWM测试

[复制链接]
435|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lulugl|  楼主 | 2024-6-23 17:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1、新建空白工程:


输入工程名称,点击create完成,生成工程.
2、打开device confige tools来配置设备


3、首先创建一个定时器,用于周期修改pwm的占空比。

4、配置GPIO,使用CYBSP_USER_LED1这pwm输出,配置CYBSP_USER_LED2为普通IO输出。


5、返回外设配置窗口,配置Pwm

到此为此,配置就完成了,下面编写用户代码:
6、声明定时器结构体,与Pwm结构体,同时配置一个计数器
cyhal_timer_t timer_obj;
uint16_t timer_count = 2000;
cyhal_pwm_t pwm_led1_control;
7、实现定时器回调函数,在函中,每次进入中断,都更新计数器,在达到半值时,翻转一次LED,同时修改pwm的占空比,实现呼吸灯的效果:
static void isr_timer(void* callback_arg, cyhal_timer_event_t event)
{
    (void)callback_arg;
    (void)event;

    if(timer_count > 0)
        timer_count -= 1;
    if(timer_count == 0)
    {
        timer_count = 2000;
        cyhal_gpio_toggle(CYBSP_USER_LED2);
    }
    if(timer_count < 1000)
    {
            cyhal_pwm_set_duty_cycle(&pwm_led1_control,timer_count/10.0,10000);
    }
    else {
            cyhal_pwm_set_duty_cycle(&pwm_led1_control, (2000-timer_count)/10.0,10000);
    }
}
8、编写用户初始化函数:
void app_timer_init(void)
{
        cyhal_pwm_init_cfg(&pwm_led1_control,&tcpwm_0_group_1_cnt_3_hal_config);
        cyhal_pwm_start(&pwm_led1_control);
    cyhal_timer_init_cfg(&timer_obj, &tcpwm_0_group_1_cnt_0_hal_config);
    cyhal_timer_register_callback(&timer_obj, isr_timer, NULL);
    cyhal_timer_enable_event(&timer_obj, CYHAL_TIMER_IRQ_TERMINAL_COUNT,3, true);
    cyhal_timer_start(&timer_obj);
}
在初始化代码中,首先初始化pwm,然后启动定时器。再初始化普通定时器,指定定时回调函数,最后启动定时器。

9、在main函数中,添回初始化函数
 app_timer_init();


【实验现象】
下载代码后,两个用户LED,一个周期闪烁,一个实现呼吸灯效果,视频如下图:

506956677d53f81e09.jpg (245.69 KB )

506956677d53f81e09.jpg

168556677d5d8b415b.jpg (245.69 KB )

168556677d5d8b415b.jpg

251486677d5df502ae.jpg (245.69 KB )

251486677d5df502ae.jpg

173766677e35ed7c0d.png (337.83 KB )

173766677e35ed7c0d.png

使用特权

评论回复
沙发
中国龙芯CDX| | 2024-6-27 10:08 | 只看该作者
PWM经典占空比调节

使用特权

评论回复
板凳
地瓜patch| | 2024-6-27 23:16 | 只看该作者
有几个pwm接口

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

715

帖子

9

粉丝