【致敬未来的攻城狮计划】— 连续打卡第十七天:FSP固件库开发GPT — PWM通用定时器 定时2s LED 闪烁

本文详细介绍了瑞萨RA2E1芯片中的通用PWM定时器(GPT)的工作原理、功能和配置方法,包括GPT的结构、引脚功能、输出模式,并通过实例展示了如何使用FSP固件库配置GPT实现2sLED闪烁,以及中断回调函数的编写。内容涵盖了从理论到实践的完整流程,适合嵌入式开发人员参考学习。
摘要由CSDN通过智能技术生成

系列文章目录

1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下

2.开发环境的选择和调试(从零开始,加油)

3.欲速则不达,今天是对RA2E1 基础知识的补充学习。

4.e2 studio 使用教程

5.Keil配置使用(使用 RASC 生成 Keil 工程)

6.Keil配置使用(使用 RASC 生成 Keil 工程)

7.(电脑重装系统)学习RA产品家族选型手册

8.问题解决、学习RA寄存器、用寄存器的方式点亮第一个LED灯。

9.继续学习RA寄存器

10.FSP固件库开发及FSP配置详解。

11.FSP固件库开发点亮第一个灯。

12.FSP固件库开发按键输入检测控制LED灯闪烁

13.FSP固件库开发启动文件详解

14.FSP固件库开发延时函数(时钟详解)

15.FSP固件库外部中断处理编程(外部中断检测按键控制LED闪烁)

16.FSP固件库系统定时器(滴答定时器SysTick)每2秒LED闪烁一次


文章目录

系列文章目录

前言

一、PWM是什么?

二、通用PWM定时器(GPT)

三、RA2E1  GPT框图

引脚功能:

引脚功能参数:

四、pwm输出模式

五、实操:GPT定时器   定时2s  LED闪烁

1.新建工程

 2.FSP配置

世上最累人的事,莫过於虚伪的过日子。


前言

        继上篇文章中讲的SysTick系统定时器,接着讲解GPT —— PWM通用定时器,学习GPT开始......


一、PWM是什么?

  • 脉冲周期(T):单位是时间,如纳秒(ns)、微秒(us)、毫秒(ms)等。

  • 脉冲频率(f):单位是赫兹(Hz)、千赫兹(KHz)等。频率与脉冲周期成倒数关系,f=1/T。

  • 脉冲宽度(W):简称“脉宽”,一般指脉冲中高电平持续的时间。单位是时间。

  • 占空比(D):脉宽除以脉冲周期的值。

PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面。

PWM的频率

是指在1秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说一秒钟PWM有多少个周期,单位Hz。

PWM的周期

T=1/f,T是周期,f是频率。

如果频率为50Hz ,也就是说一个周期是20ms,那么一秒钟就有 50次PWM周期。

占空比

是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是% (0%-100%)


二、通用PWM定时器(GPT)

        通用 PWM 定时器(GPT,General PWM Timer)是 RA MCU 的其中一种 32/16 位的定时器外设。 在 GPT 当中,可分为 GPT32 和 GPT16,它们最主要的区别是计数器的不同。 GPT32 是 32 位的定时器,包含的计数器是 32 位的,所能计数的范围为:0 ~ 0xFFFF_FFFF; 而 GPT16 是 16 位的定时器,包含的计数器是 16 位的,所能计数的范围为:0 ~ 0xFFFF。

        定时器(Timer)最基本的功能就是定时,比如定时发送串口数据、定时采集AD数据、定时触发中断处理其它事务等等。 如果把定时器与 GPIO 引脚结合起来使用的话可以实现更加丰富的功能, 可以对输入信号进行计数,可以测量输入信号的脉冲宽度,可以输出单个脉冲、PWM 等波形,等等。 通过定时器生成 PWM 波形信号来控制电机状态是工业控制的普遍方法,这方面知识非常值得深入了解。

        GPT 模块可用于计数事件、测量外部输入信号、作为通用计时器并产生周期性中断、以及输出周期性或 PWM 信号到 GTIOC 引脚。 GPT 也可用于输出单个脉冲,但是注意这是通过软件来实现的,GPT 硬件本身不支持输出单个脉冲(One-Shot)功能。 当使用单个脉冲(One-Shot)模式时,必须要开启中断,计时器需要在脉冲周期结束后在 ISR 中断服务函数中被停止。

        通用PWM定时器(GPT)是一个具有GPT32×1通道的32位定时器和一个具有GPT16×6通道的16位定时器。PWM波形可以通过控制加计数器、减计数器或加减计数器来产生。

        此外, 通用定时器(GPT)是一个具有GPT 32×1通道的32位定时器和一个具有GPT 16×6通道的16位定时器。脉宽调制波形可以通过控制加计数器、减计数器或加减计数器来产生此外,可以生成PWM波形来控制无刷直流电机。

        GPT也可以用作通用定时器。 可以生成脉宽调制波形来控制无刷直流电机.GPT也可以用作通用定时器.

 


三、RA2E1  GPT框图

引脚功能:

引脚名称

I/O 方向

功能

共用

GTETRGx

Input

外部触发输入引脚 x (input through the POEG)

x: A ~ D

GPT32n

n: 0 ~ 3

GTIOCnA

Input/Output

GPT 的输入输出引脚 A

GTIOCnB

Input/Output

GPT 的输入输出引脚 B

GPT16m

m: 4 ~ 9

GTIOCnA

Output

GPT 的输入输出引脚 A

GTIOCnB

Output

GPT 的输入输出引脚 B

GPT_OPS

GTIU

Input

霍尔传感器 U 相输入

GTIV

Input

霍尔传感器 V 相输入

GTIW

Input

霍尔传感器 W 相输入

GTOUUP

Output

BLDC 电机控制三相PWM输出(U相上桥臂)

GTOULO

Output

BLDC 电机控制三相PWM输出(U相下桥臂)

GTOUUP

Output

BLDC 电机控制三相PWM输出(V相上桥臂)

GTOULO

Output

BLDC 电机控制三相PWM输出(V相下桥臂)

GTOUUP

Output

BLDC 电机控制三相PWM输出(W相上桥臂)

GTOULO

Output

BLDC 电机控制三相PWM输出(W相下桥臂)

引脚功能参数:

参数

描述

功能

  • 每个计数器的递增计数或递减计数(锯齿波)或递增递减计数(三角波)

  • 每个通道可独立选择时钟源

  • 每个通道两个输入/输出引脚

  • 每个通道两个输出比较/输入捕获寄存器

  • 每个通道的两个输出比较/输入捕获寄存器,提供四个寄存器作为缓冲寄存器,在不使用缓冲时可以作为比较寄存器工作

  • 在输出比较操作中,缓冲器切换可以处于波峰或波谷,从而能够生成横向不对称的PWM波形

  • 用于在每个通道中设置帧周期的寄存器,能够在上溢或下溢时产生中断

  • 在 PWM 操作中产生死区时间

  • 任意通道同步启动、停止和清除计数器

  • 响应最多8个ELC事件的计数开始、计数停止、计数清除、递增计数、递减计数或输入捕获操作

  • 根据两个输入引脚的状态进行计数开始、计数停止、计数清除、递增计数、递减计数或输入捕捉操作

  • 可响应最多4个外部触发器以进行计数开始、计数停止、计数清除、递增计数、递减计数或输入捕捉操作

  • 通过检测输出引脚之间的短路,从而禁用输出引脚的功能

  • 可以产生控制无刷直流电机的 PWM 波形

  • 比较匹配 A 到 F 事件、上溢下溢事件和输入 UVW 边缘事件可以输出到 ELC

  • 可为输入捕获和输入 UVW 启用噪声滤波器

  • 周期计数功能

  • 通道输出之间的逻辑运算

  • 总线时钟:PCLKA,核心时钟:PCLKD

  • 频率比:PCLKA:PCLKD = 1:N(N = 1/2/4/8/16/32/64)

计数时钟源

  • PCLKD/n(n = 1/2/4/8/16/32/64/256/1024)

  • GTETRGn(n = A, B, C, D)

中断源(9个源)

  • GTCCRA 比较匹配/输入捕获(GPTn_CCMPA)

  • GTCCRB 比较匹配/输入捕获(GPTn_CCMPB)

  • GTCCRC 比较匹配(GPTn_CMPC)

  • GTCCRD 比较匹配(GPTn_CMPD)

  • GTCCRE 比较匹配(GPTn_CMPE)

  • GTCCRF 比较匹配(GPTn_CMPF)

  • GTCNT 上溢(GPTn_OVF)

  • GTCNT 下溢(GPTn_UDF)

  • GTPC 计数停止(GPTx_PC,x = 0,1,4-6)


四、pwm输出模式

PWM 输出就是对外输出脉宽(即占空比)可调的方波信号, 信号频率由周期设定寄存器 GTPR 的值决定,占空比由比较寄存器 GTCCR 的值决定。

GPT 的输出模式有:

  • 锯齿波 PWM 模式(Saw-wave PWM mode)(该模式下单缓冲或双缓冲都可使用)

  • 锯齿波单脉冲模式(Saw-wave one-shot pulse mode)(该模式下使用固定的缓冲操作)

  • 三角波 PWM 模式1(Triangle-wave PWM mode 1)(波谷32位传输)(该模式下单缓冲或双缓冲都可使用)

  • 三角波 PWM 模式2(Triangle-wave PWM mode 2)(波峰和波谷32位传输)(该模式下单缓冲或双缓冲都可使用)

  • 三角波 PWM 模式3(Triangle-wave PWM mode 3)(波谷64位传输)(该模式下使用固定的缓冲操作)


五、实操:GPT定时器   定时2s  LED闪烁

1.新建工程


 2.FSP配置

        打开 FSP 配置界面,在 Stacks 中加入 GPT:

 设置 属性:(如图只是解释  每个功能的作用)

“Common”部分:

属性

描述

Parameter Checking

参数检查(选择是否生成包含参数检查的代码)。

Pin Output Support

支持引脚输出。

“Enabled”或“Disabled” 用于使能或禁止 GTIOCx 输出PWM信号。

“Enabled with Extra Features” 用于支持三角波输出模式,

以及用于支持“Extra Features”部分的特性。

Write Protect Enabled

GPT寄存器的写保护。选择使能/禁止写保护并应用于所有GPT通道。

若使能了这一项,则无法对GPT寄存器进行写操作,需要使用

r_gpt_write_protect_disable() 函数取消写保护,才能写入寄存器。

Clock Source

时钟源选择。

RA6M5 的GPT只能选择 PCLKD 作为内部时钟源。

“General”部分:

属性

描述

Name

模块名字。

Channel

通道选择。指定硬件通道,也就是指定使用哪一个GPT定时器。

Mode

可以选择周期计数,单次计数,PWM模式,三角波对称PWM模式和三角波不对称PWM模式。

Periodic

One-Shot

PWM

One-Shot Pulse

Triangle-Wave Symmetric PWM

Triangle-Wave Asymmetric PWM

Triangle-Wave Asymmetric PWM (Mode 3)

Period

计数器的计数周期。

Period Unit

计数器计数周期的单位。

“Interrupts”部分:

属性

描述

Callback

中断回调函数名。

Overflow/Crest Interrupts Priority

选择上溢中断的优先级。如果选择 Disabled 则禁止该中断。

该中断亦是三角波的波峰中断。

Capture A Interrupts Priority

选择捕获A中断的优先级。如果选择 Disabled 则禁止该中断。

Capture B Interrupts Priority

选择捕获B中断的优先级。如果选择 Disabled 则禁止该中断。

Underflow/Trough Interrupts Priority

选择下溢中断的优先级。如果选择 Disabled 则禁止该中断。

该中断亦是三角波的波谷中断。

“Extra Features”部分:

属性

描述

Output Disable > Output Disable POEG Trigger

选择一个信号触发禁用 POEG。

Output Disable > POEG Link

选择哪一个 POEG 连接到该 GPT 通道。

Output Disable > GTIOCA Disable Setting

GTIOCA 的禁用设定。

Output Disable > GTIOCB Disable Setting

GTIOCB 的禁用设定。

ADC Trigger > Start Event Trigger (Channels with GTINTAD only)

选择触发 ADC 转换的时机

Dead Time > Dead Time Count Up (Raw Counts)

选择死区时间(应用到向上计数)

Dead Time > Dead Time Count Down (Raw Counts) (Channels with GTDVD only)

选择死区时间(应用到向下计数)

ADC Trigger (Channels with GTADTRA only) > ADC A Compare Match (Raw Counts)

设置生成 GPTn AD TRIG A 事件的比较匹配值。

ADC Trigger (Channels with GTADTRB only) > ADC B Compare Match (Raw Counts)

设置生成 GPTn AD TRIG B 事件的比较匹配值。

Interrupt Skipping (Channels with GTITC only) > Interrupt to Count

选择跳过中断的计数源。中断跳过计数器在每个源事件之后递增。

当中断跳过计数器非零时,将跳过所有顶部/溢出中断和槽/底部中断。

Interrupt Skipping (Channels with GTITC only) > Interrupt Skip Count

选择要跳过的中断数。

Interrupt Skipping (Channels with GTITC only) > Skip ADC Events

当中断跳过计数不为零时,选择要禁止的 ADC 事件。

Extra Features

选择是否使能该通道的“Extra Features”(额外特性)

工程正确设置:


实操代码:

/* GPT 初始化函数 */
void GPT_Timing_Init(void)
{
    /* 初始化 GPT0 模块 */
    R_GPT_Open(&g_timer_gpt0_ctrl, &g_timer_gpt0_cfg);

    /* 启动 GPT0 定时器 */
    R_GPT_Start(&g_timer_gpt0_ctrl);
}
 

/* GPT 中断回调函数 */
void gpt0_timing_callback(timer_callback_args_t * p_args)
{
    /* 定时器溢出事件 */
    if (TIMER_EVENT_CYCLE_END == p_args->event)
    {
        /* 翻转 LED1 */
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_HIGH); //LED1
    }
	else
		R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW); //LED1亮
}

/*******************************************************************************************************************//**
 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
 * is called by main() when no RTOS is used.
 **********************************************************************************************************************/
void hal_entry(void)   //相当于主函数  函数最终执行的地方
{
	
	R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_LOW); //LED1亮
	R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW); //LED1亮
	
    R_BSP_PinAccessEnable ();  //启用对PFS寄存器的访问,因为后面写IO口都用BSP内联函数
	
	SysTick_Init(1000);//初始化系统时钟
	
	GPT_Timing_Init();  // GPT 初始化
	
	
	while(1){
	

	}
	
	
	
	
    /* TODO: add your own code here */

#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

视频效果:

         如上一篇文章   SysTick系统定时器   是同等效果。大家可以自行翻阅一下效果。

        中断回调函数非常地简单,直接在回调函数里面使用 if 语句判断触发中断的事件是否是定时器溢出事件, 若是定时器溢出事件则翻转一次 LED1 引脚的电平。 由于定时器被我们配置为1秒的计时周期,因此每2秒会溢出一次,控制 LED1 的引脚的电平会每秒钟翻转一次。


总结

        通用PWM定时器(GPT)是一个具有GPT32×1通道的32位定时器和一个具有GPT16×6通道的16位定时器。PWM波形可以通过控制加计数器、减计数器或加减计数器来产生。

        此外, 通用定时器(GPT)是一个具有GPT 32×1通道的32位定时器和一个具有GPT 16×6通道的16位定时器。脉宽调制波形可以通过控制加计数器、减计数器或加减计数器来产生此外,可以生成PWM波形来控制无刷直流电机。


世上最累人的事,莫过於虚伪的过日子。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值