瑞萨RA0单片机连载——PWM实现呼吸灯
RA0E1拥有16bit的定时器。定时器支持PWM输出功能。这一节我将展示如何配置并实现呼吸灯的效果。
在前面工程基础之上打开RASC配置工具,新建一个r_tau_pwm的stack, 并激活pwm
开发板板载的LED1为P103,所以在Pwm的属性中配置通道数为5,并设置TIO5,其详细配置属性如下图:
然后重新生成工程代码,打开工程,添加修改占空比与初始化代码如下:
view plaincopy to clipboardprint?
1./**自定义函数:设置PWM占空比
2.@param duty占空比范围:0~100 %
3.*/
4.void TAU_PWM_SetDuty(uint8_t duty)
5. {
6.timer_info_t info;
7.uint32_t current_period_counts;
8.uint32_t duty_cycle_counts;
9.
10.if (duty > 100)
11.duty=100; //限制占空比范围:0~100
12.
13 /*获得TAU的信息*/
14.R_TAU_PWM_InfoGet(&g_timer0_ctrl, &info);
15.
16./*获得计时器一个周期需要的计数次数*/
17.current_period_counts = info.period_counts;
18.
19./*根据占空比和一个周期的计数次数计算*/
20.duty_cycle_counts=(uint32_t)(((uint64_t)current_period_counts * duty)/100);
21.
22./*设置占空比(设置从通道输出占空比)*/
23.R_TAU_PWM_DutyCycleSet(&g_timer0_ctrl, duty_cycle_counts, TAU_PWM_IO_PIN_CHANNEL_5);
24.
25.}
26.
27.void TAU_PWM_Init(void)
28.{
29./*初始化TAU模块*/
30.R_TAU_PWM_Open(&g_timer0_ctrl, &g_timer0_cfg);
31.
32./*启动TAU_GPT定时器*/
33.R_TAU_PWM_Start(&g_timer0_ctrl);
34.
35. /* 重新设置占空比为 80% */
36. TAU_PWM_SetDuty(80);
37. }
【测试】
在主循环中添加测试代码如下:
view plaincopy to clipboardprint?
1.for(dutys=0;dutys<95;++dutys)
2.{
3.
4. R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
5.TAU_PWM_SetDuty(dutys);
6.
7.dutys++;
8.
9.}
下载程序后就可以看到LED1程现在的呼吸灯效果。
(本文来源于《EEPW》202505)
评论