2026 / 07 / 22
瑞萨RA8系列教程 | RA8输出PWM实现方法

PWM:Pulse Width Modulation,脉冲宽度调制。

单片机实现PWM输出的方式有很多种有通过IO延时翻转实现的,比如:

while(1)
{
  IO口高电平
  Delay延时
  IO口低电平
  Delay延时
}




也有通过定时器中断控制IO高低电平输出实现的。


定时器中断配置——>启动定时器——>响应中断,控制IO高低电平


当然,本文通过,瑞萨RA8D1单片机通用PWM定时器(GPT,General PWM Timer)输出PWM波形,这样既避免了占用CPU资源,又避免了误差(精度相对很高)。


下面手把手教大家基于e2 studio环境下,实现RA8单片机输出PWM的方法。

 

准备工作

1 下载并安装e2 studio工具

下载地址,推荐瑞萨官方的GitHub:https://github.com/renesas/fsp/releases


我们这里基于Windows环境,安装
exe文件,基本根据提示信息一路next即可。这里不再详述。


2 准备RA8D1开发板

我们这里以瑞萨RA8D1单片机为例:



RA8单片机PWM输出方法

本文就瑞萨官方集成开发工具e2 studio,它是瑞萨单片机一站式编程工具,只需要动动鼠标点一点就能创建一个单片机工程。


1 打开e2 studio创建PWM项目



我们命名项目名称为:RA8D1_PWM


选择对应芯片型号:R7FA8D1BEC




只需要动动鼠标“点一点”,一个完整的工程就创建好了。


2 配置工程

我们使用RA8D1单片机通用PWM定时器(General PWM Timer)GPT4,引脚P301输出PWM。


这里配置时钟、添加GPT模块以相关配置。


配置时钟:

GPT4使用PCLKD分频作为时钟源


配置引脚:

我们使用GPT4的P301作为PWM输出引脚。


新建定时器模块:

我们添加定时器模块并配置相关属性(配置常用参数,其实默认即可)。


3 添加源代码

我们这里简单添加一个gpt4模块(源代码文件),如图:


bsp_gpt_pwm_output.c源代码:

#include "bsp_gpt_pwm_output.h"

/* GPT初始化函数 */
void GPT_PWM_Init(void)
{
    /* 初始化 GPT 模块 */
    R_GPT_Open(&g_timer_gpt4_ctrl, &g_timer_gpt4_cfg);
    /* 启动 GPT 定时器 */
    R_GPT_Start(&g_timer_gpt4_ctrl);
}

/** 设置PWM占空比    @param duty 占空比范围:0~100 %*/
void GPT_PWM_SetDuty(uint8_t duty)
{
    timer_info_t info;
    uint32_t current_period_counts;
    uint32_t duty_cycle_counts;
    if (duty > 100)
        duty = 100; //限制占空比范围:0~100

    /* 获得GPT的信息 */
    R_GPT_InfoGet(&g_timer_gpt4_ctrl, &info);

    /* 获得计时器一个周期需要的计数次数 */
    current_period_counts = info.period_counts;

    /* 根据占空比和一个周期的计数次数计算GTCCR寄存器的值 */
    duty_cycle_counts = (uint32_t)(((uint64_t) current_period_counts * duty) / 100);

    /* 最后调用FSP库函数设置占空比 */
    R_GPT_DutyCycleSet(&g_timer_gpt4_ctrl, duty_cycle_counts, GPT_IO_PIN_GTIOCB);}
}

bsp_gpt_pwm_output.h头代码:

#ifndef __BSP_GPT_PWM_OUTPUT_H
#define __BSP_GPT_PWM_OUTPUT_H
#include "hal_data.h"

void GPT_PWM_Init(void);
void GPT_PWM_SetDuty(uint8_t duty);

#endif


我们这里只有两个简单函数,在我们代码中添加GPT_PWM_Init即可实现(配置中的)200KHz,占空比80%的PWM波形输出。


4 演示效果

下图是我们配置200KHz,占空比80%的PWM波形:


根据源码,你能发现,我们只需要初始化(配置好)PWM输出,后面就不会占用CPU资源。


我们提供了一个简单的接口,修改占空比,如果需要根据需求修改占空比,我们调用一下接口即可。比如我们修改占空比为60%:


当然,更多参数,我们可以根据自己情况封装函数接口。

文件下载
隐私条款

一、接受条款 使用者(也称"您")在访问或使用本网站及其服务时,即已经表示同意并不加修改地接受本《用户协议》、本网站的《隐私声明》、《法律声明》以及其关或相链接的网页和网站的条件和条款的规定。我们强烈建议:在您阅读和接受本《用户协议》时,也应阅读并接受本《用户协议》中所提到《隐私声明》、《法律声明》及其相关或相链接网页或网站所包含的资料,因为《隐私声明》、《法律声明》及其它相关网页或网站可能包含对您适用的进一步规定。(请注意:点击划有底线的词句即可链接到上述《隐私声明》、《法律声明》及其它相关或相链接的网页和网站。

 

二、使用者的资格要求 在本网站中"使用者"指的是浏览、阅读、使用本网站信息或服务的任何个人或组织。本网站的服务仅适用于根据相关法律的规定具有签订有约束力的合同的个人或组织并仅由其使用。本网站的服务不向18周岁以下的个人使用者提供,也不向临时被本网站中止或取消使用者资格的使用者提供。如果使用者不符合本条规定,请停止使用本网站或本网站的服务。

样品
申请

应用
资源

微信