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

news2024/12/23 10:29:33

系列文章目录

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波形来控制无刷直流电机。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/477558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL提权/条件竞争漏洞分析和利用(37)

预备知识 漏洞描述 CVE编号&#xff1a;CVE-2016-6663 / CVE-2016-5616 && CVE-2016-6664-5617漏洞级别&#xff1a;严重 漏洞影响&#xff1a;漏洞影响&#xff1a; MariaDB < 5.5.52 < 10.1.18 < 10.0.28 MySQL < 5.5.51 < 5.6.32 < 5.7…

【MATLAB数据处理实用案例详解(18)】——利用自组织特征映射网络实现亚洲足球水平聚类

目录 一、问题描述二、自组织特征映射网络实现亚洲足球水平聚类原理三、算法步骤3.1 定义样本3.2 创建网络3.3 网络训练3.4 测试3.5 显示聚类结果 四、运行结果五、完整代码 一、问题描述 中国男子足球队的比赛成绩一直牵动着广大球迷的心。很多人认定中国队已处于亚洲三流甚至…

SpringBoot 多数据源及事务解决方案

1. 背景 一个主库和N个应用库的数据源&#xff0c;并且会同时操作主库和应用库的数据&#xff0c;需要解决以下两个问题&#xff1a; 如何动态管理多个数据源以及切换&#xff1f; 如何保证多数据源场景下的数据一致性(事务)&#xff1f; 本文主要探讨这两个问题的解决方案…

【C++】——C++基础知识点(C++和C语言的区别)

文章目录 1. 前言2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C的输入输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理——名字修饰 6. 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 引用的使用场景6.5 引用和指针的…

OtterCTF

五年前的老题了&#xff0c;但还是值得一做&#xff0c;内存取证yyds! What the password? 取电脑的密码 先看缓存在内存中的注册表的偏移量 volatility_2.6_win64_standalone -f 1.vmem --profileWin7SP1x64 hivelist关注到SAM(账户密码表)和system volatility_2.6_win6…

MRI k空间概念整理

以下内容为MRI期末复习笔记&#xff0c;仅供复习参考使用。 K空间概念 K空间为包含MR数据的阵列&#xff0c;也可定义为原始数据阵列相位编码轴和频率编码轴的交叉点 MR扫描得到的数据为谱空间数据&#xff0c;谱空间数据与空间数据位置无直接对应关系 k空间每一数据点或数据…

数组、链表专题

数组、链表专题 前缀和数组LeetCode 303. 区域和检索 - 数组不可变解题思路代码实现 LeetCode 304. 二维区域和检索 - 矩阵不可变解题思路代码实现 总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xff01;&#xff01;&#xff01;多练习&#xff0c;多总结…

4726.ACWing.第80场周赛寻找数字

ACWing.第80场周赛寻找数字 题目算法思想代码 题目 算法思想 时间复杂度 相当于01背包的搜索时间复杂度&#xff0c;每个位上要么是 4 要么是 7 &#xff0c;而且题意位数不超过10位&#xff0c;所以dfs可以直接过搜索算法 代码 #include<bits/stdc.h> using namespac…

【LeetCode】235. 二叉搜索树的最近公共祖先

1. 问题 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可…

项目骨架搭建

CSS样式补充 精灵图 CSS精灵图&#xff08;CSS Sprites&#xff09;是一种网页优化技术&#xff0c;通过将多个小图像合并成一个大图像&#xff0c;然后通过CSS的背景定位&#xff08;background-position&#xff09;属性来显示对应的图像部分。这种技术可以减少HTTP请求次数…

【Win11 | SSH】详细教你如何在Windows 11 下完成OpenSSH的安装(保姆级攻略)

文章目录 一、问题描述二、问题尝试解决2.1 ssh的问题2.2 如何手动安装2.3 install 脚本找不到2.4 power shell 开始报错2.5 继续安装ssh 三、输入 ssh 再报错 一、问题描述 最近在测试github的连接时&#xff0c;在终端或命令行窗口中&#xff0c;输入以下命令测试你的 SSH 连…

【五一创作】医院手术室麻醉管理系统概述和功能 SQLServer 2008 R2

医院手术室麻醉管理系统概述 1.系统功能概述 手术麻醉管理系统采用下拉式汉化菜单&#xff0c;界面友好&#xff0c;实用性强&#xff0c;设有与住院、病区、药房等系统的软件接口。 系统主要功能有&#xff1a; 手术管理&#xff1a;提供手术病人检索、手术申请、手术安排…

VSCode配置Arduino

综上所周知&#xff0c;Arduino IDE太不智能了&#xff0c;没有代码提示&#xff0c;不能代码跳转&#xff0c;于是乎找一下vscode有啥插件用 在网上找了些教程&#xff0c;也碰到了奇奇怪怪地坑&#xff0c;于是记录一下能成功配置步骤 准备 1.已安装好Arduino IDE 2.已安装好…

Clion开发STM32之串口封装(HAL库)

前提 在开发STM32过程中&#xff0c;芯片提供的串口引脚一般是不会发生变化的&#xff0c;所以为了方便移植&#xff0c;借助HAL提供的注册回调函数自定义&#xff0c;这边重新进行简要的封装此工程开发是以Clion为开发的IDE,用keil只需将对应的文件进行移植即可.文章末尾附带…

Photoshop如何使用选区之实例演示?

文章目录 0.引言1.利用快速选择工具抠图2.制作网店产品优惠券3.利用选区改变眼睛颜色4.抠取复杂的花束5.制作丁达尔光照效果6.利用选区调整图像局部颜色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及…

STM32F103 系统架构

1、Cortex M3 内核 & 芯片 ARM公司提供内核&#xff08;如Cortex M3&#xff0c;简称CM3&#xff0c;下同&#xff09;授权&#xff0c;完整的MCU还需要很多其他 组件。芯片公司&#xff08;ST、NXP、TI、GD、华大等&#xff09;在得到CM3内核授权后&#xff0c;就可以把C…

Linux网络基础二

一.应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层。 二.再谈 "协议" 协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化…

VBA替换中文文献引用出现的et al.和and

问题描述&#xff1a;Endnote是常用的文献管理工具&#xff0c;并提供国标模板Chinese Std GBT7714 (numeric).ens&#xff0c;但Endnote在中英文混排上略欠考虑。Chinese Std GBT7714使用序号的形式&#xff08;******1&#xff09;对文献进行引用&#xff0c;但有时我们需要以…

python毕业设计之django+vue医院医疗救助系统

&#xff08;1&#xff09; 信息发布 当有基金的申请审批通过时&#xff0c;慈善机构信息维护部门应与慈善机构进行对接&#xff0c;保证信息的真实性&#xff0c;信息发布之后患者可以进行相应的基金申请。 &#xff08;2&#xff09; 基金管理 此项功能是保证基金信息的动态刷…

HR员工管理的三重境界:管事、管人、管心

在一个公司里&#xff0c;员工来来往往是常态&#xff0c;虽说我们不能替他们决定&#xff0c;但是一定是与公司的管理者有一定的关系。马云曾经说过&#xff1a;“一个员工离职&#xff0c;不外乎两种原因&#xff0c;一是钱没给到位&#xff1b;二是心里委屈了”。一句话就是…