[AIROC™ 蓝牙] 【英飞凌CYW20829测评】3、PWM测试

[复制链接]
905|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结构体,同时配置一个计数器
  1. cyhal_timer_t timer_obj;
  2. uint16_t timer_count = 2000;
  3. cyhal_pwm_t pwm_led1_control;
7、实现定时器回调函数,在函中,每次进入中断,都更新计数器,在达到半值时,翻转一次LED,同时修改pwm的占空比,实现呼吸灯的效果:
  1. static void isr_timer(void* callback_arg, cyhal_timer_event_t event)
  2. {
  3.     (void)callback_arg;
  4.     (void)event;

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

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
中国龙芯CDX 发表于 2024-6-27 10:08 | 显示全部楼层
PWM经典占空比调节
地瓜patch 发表于 2024-6-27 23:16 | 显示全部楼层
有几个pwm接口
您需要登录后才可以回帖 登录 | 注册

本版积分规则

188

主题

844

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部