0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨RA系列FSP库开发实战指南之使用GPT输入捕获进行脉宽和周期测量实验

瑞萨嵌入式小百科 来源:野火电子 2026-04-24 10:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

27.8

实验3:输入捕获——脉宽和周期测量

上一个实验使用了GPT的输出功能,本次实验要使用GPT的输入功能,通过GPT的输入捕获进行脉宽和周期测量。其测量的原理如下图所示。

0871bdaa-3e01-11f1-90a1-92fbcf53809c.png

首先启动GPT定时器,在上升沿A处进行捕获,记此时时间为A;紧接着在下降沿B处进行捕获,记此时时间为B;最后再次在上升沿C处进行捕获,记此时时间为C或者A’。设PWM的周期为T,占空比为D,频率为f,则:

09274814-3e01-11f1-90a1-92fbcf53809c.png

27.8.1

硬件设计

以野火启明6M5开发板为例,本实验使用P600和P603这两个引脚,P600用于输出PWM信号,P603用于输入捕获。将P600与P603使用杜邦线连接,引脚在引出排针处,如下图所示。

0991cbee-3e01-11f1-90a1-92fbcf53809c.png

野火启明6M5开发板例程选用的PWM输出引脚为:P600(GTIOC6B);选用的输入捕获引脚为:P603(GTIOC7A)。

野火启明4M2开发板例程选用的PWM输出引脚为:P405(GTIOC1A);选用的输入捕获引脚为:P414(GTIOC0B)。

野火启明2L1开发板例程选用的PWM输出引脚为:P115(GTIOC4A);选用的输入捕获引脚为:P113(GTIOC2A)。

本次实验需要将PWM输出引脚与输入捕获引脚使用杜邦线连接起来。

27.8.2

软件设计

27.8.2.1

新建工程

由于本实验的目标是测量PWM的周期、占空比,因此我们在上一个实验的基础上修改程序。

对于e2studio开发环境:拷贝一份我们之前的e2s工程“27_GPT_PWM_Output”,然后将工程文件夹重命名为“27_GPT_Input_Capture”,最后再将它导入到我们的e2studio工作空间中。

对于Keil开发环境:拷贝一份我们之前的Keil工程“27_GPT_PWM_Output”,然后将工程文件夹重命名为“27_GPT_Input_Capture”,并进入该文件夹里面双击Keil工程文件,打开该工程。

工程新建好之后,在工程根目录的“src/gpt”路径下面,新建源文件和头文件:

bsp_gpt_input_capture.c

bsp_gpt_input_capture.h

工程文件结构如下:

列表9:文件结构

左右滑动查看完整内容

27_GPT_Input_Capture
├─ ......
└─ src
 ├─ led
 │ ├─ bsp_led.c
 │ └─ bsp_led.h
 ├─ debug_uart
 │ ├─ bsp_debug_uart.c
 │ └─ bsp_debug_uart.h
 ├─ gpt
 │ ├─ bsp_gpt_pwm_output.c
 │ ├─ bsp_gpt_pwm_output.h
 │ ├─ bsp_gpt_input_capture.c//新增文件
 │ └─ bsp_gpt_input_capture.h//新增文件
 └─ hal_entry.c

27.8.2.2

FSP配置

下面以野火启明6M5开发板为例来讲解相关的FSP配置。

由于在上一个实验中我们已经配置好了P600用于输出PWM信号,因此本实验中只需要添加输入捕获需要使用到IO引脚P603,需要在“Pins”配置页面中配置GPT7所使用的引脚。

09f54c28-3e01-11f1-90a1-92fbcf53809c.png

在“Stacks”配置页面中加入GPT,按如下图所示的配置进行设置。需要注意的是,因为“Input”里面的各类配置项目若是展开来的话篇幅比较长,因此在图中并未展开出来,我们要注意勾上以下几个选项:

展开Input->Capture ASource并勾上(在GTIOCA的上升沿启用输入捕获A,无论GTIOCB引脚是:

–GTIOCA Rising Edge While GTIOCB Low

–GTIOCA Rising Edge While GTIOCB High

展开Input->Capture BSource并勾上(在GTIOCA的下降沿启用输入捕获B,无论GTIOCB引脚是:

–GTIOCA Falling Edge While GTIOCB Low

–GTIOCA Falling Edge While GTIOCB High

0a51d966-3e01-11f1-90a1-92fbcf53809c.png

点击可查看大图

GPT的“Input”选项卡的属性描述:

表7:GPT属性描述:“Input”

0ad05124-3e01-11f1-90a1-92fbcf53809c.png

点击可查看大图

27.8.2.3

GPT初始化

初始化GPT模块用于输入捕获的函数如下。在这个函数中,我们先初始化GPT模块,然后调用R_GPT_Info Get函数获取GPT的配置信息,主要是为了获取计数器的计数周期,即GPT一个周期的计数次数,并保存到全局变量period中。

最后使能输入捕获,并启动GPT定时器。

列表10:GPT初始化

左右滑动查看完整内容

timer_info_t info;//用于获取定时器参数信息
uint32_t period;//输入捕获计数器的计数周期
/* GPT 初始化函数*/
voidGPT_InputCapture_Init(void)
{
 /* 初始化GPT 模块*/
 R_GPT_Open(&g_timer_gpt7_ctrl, &g_timer_gpt7_cfg);
 /* 获取当前参数*/
  (void)R_GPT_InfoGet(&g_timer_gpt7_ctrl, &info);
 /* 获取计数周期:GPT 的一个周期的计数次数*/
  period = info.period_counts;
 /* 使能输入捕获*/
 R_GPT_Enable(&g_timer_gpt7_ctrl);
 /* 启动GPT 定时器*/
 R_GPT_Start(&g_timer_gpt7_ctrl);
}

27.8.2.4

GPT中断回调函数

GPT输入捕获中断回调函数如下。

列表11:GPT中断回调函数

滑动查看完整内容

/* 保存所测量的PWM 信号的信息*/
uint32_tpwm_period;//PWM 周期
uint32_tpwm_high_level_time;//PWM 高电平的时间
uint32_tpwm_freq;//PWM 频率
uint32_tpwm_duty;//PWM 占空比
/* GPT 输入捕获中断回调函数*/
voidgpt7_input_capture_callback(timer_callback_args_t* p_args)
{
 staticuint32_ta_time;// A 上升沿捕获的时间
 staticuint32_tb_time;// B 下降沿捕获的时间
 staticuint32_tc_time;// C 上升沿捕获的时间(其实也就是A 可以用A'表示)
 staticuint32_toverflow_times;//计数器溢出次数
 staticuint8_tone_period_flag=0;//用于表示是否完成对一个完整周期的测量
 
 
 switch(p_args->event)
  {
   /* 捕获到上升沿-- 有可能是A 或者C (A') 位置*/
   caseTIMER_EVENT_CAPTURE_A:
     /* A 开始对某个周期进行测量*/
     if(0== one_period_flag)
      {
        a_time = p_args->capture;//记录捕获的时间A
        overflow_times =0;//初始化计数器溢出次数
        one_period_flag ++;//表示即将完成对某个周期的测量
      }
     /* C (A') 如果测量完了一个周期,则计算PWM 信号周期和高电平的时间*/
     elseif(1== one_period_flag)
      {
        c_time = p_args->capture + overflow_times * period;//记录捕
        获的时间C
       //计算PWM 周期
        pwm_period = c_time - a_time;
       //清零所有标志位
        overflow_times =0;
        one_period_flag =0;//标志位清0, 重新进入下一轮的测量
      }
     break;
     
   /* 捕获到下降沿-- 是B 位置*/
   caseTIMER_EVENT_CAPTURE_B:
     //如果是在测量周期内检测到下降沿
     if(1== one_period_flag)
      {
      b_time = p_args->capture + overflow_times * period;//记录捕
      获的时间B
      pwm_high_level_time = b_time - a_time;//计算高电平时间
      }
     break;
     
   /* 定时器计数溢出事件*/
   caseTIMER_EVENT_CYCLE_END:案件 TIMER_EVENT_CYCLE_END:
     /* 输入捕获期间计数器溢出,则记录溢出次数+1 */
      overflow_times++;
     break;
     
   default:
     break;
  }
}

在GPT中断回调函数中,我们使用switch语句判断触发中断的事件类型。GPT在引脚输入PWM信号的上升沿触发捕获A事件,在PWM信号的下降沿触发捕获B事件,并在计数器溢出时触发定时器计数溢出事件。

警告

建议不要在中断回调函数中打印数据,因为PWM频率一般很高,而printf函数执行所消耗的时间比较长,可能会阻塞中断服务函数的运行。同时也应该时刻注意中断优先级的问题。

27.8.2.5

hal_entry入口函数

列表12:hal_entry入口函数

滑动查看完整内容

/* 用户头文件包含*/
#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"gpt/bsp_gpt_pwm_output.h"
#include"gpt/bsp_gpt_input_capture.h"




// 外部变量声明
externtimer_info_t info;//用于获取定时器参数信息
externuint32_t pwm_period;//PWM 周期
externuint32_t pwm_high_level_time;//PWM 高电平的时间
externuint32_t pwm_freq;//PWM 频率
externuint32_t pwm_duty;//PWM 占空比




voidhal_entry(void)
{
 /*TODO:add your own code here */
 LED_Init();// LED 初始化
 Debug_UART4_Init();// SCI4 UART 调试串口初始化
 
 GPT_PWM_Init();// GPT PWM 输出初始化
 GPT_InputCapture_Init();// GPT 输入捕获初始化
 
  printf("这是一个GPT 的PWM 输出+ 输入捕获功能实验
");
  printf("使用杜邦线连接P600 和P603 引脚,然后打开串口助手查看串口的打印信息

  ,→");
 
 
 while(1)
  {
   /* 计算PWM 的频率*/
    pwm_freq=info.clock_frequency/pwm_period;
   /* 计算PWM 的占空比*/
    pwm_duty=pwm_high_level_time*100/pwm_period;
   // 打印
    printf("High=%d, Period=%d, ", pwm_high_level_time, pwm_period);
    printf("Friquency = %dHz, Duty_Cycle = %d%%
", pwm_freq, pwm_
    ,→duty);
    pwm_period=pwm_high_level_time=pwm_freq=0;//打印完后旧数据清零
   // LED1 闪烁指示程序正在运行...
   LED1_TOGGLE;
   // 间隔1s
   R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
  }
 
#ifBSP_TZ_SECURE_BUILD
 /* Enter non-secure code */
 R_BSP_NonSecureEnter();
#endif
}

27.8.3

下载验证

以野火启明6M5开发板为例,编译并下载程序后,复位开发板使程序重新运行,然后使用杜邦线连接P600和P603引脚,然后打开串口助手查看串口的打印信息。串口会打印出PWM信号的频率和占空比等信息,实验现象如下图所示。

0b40add4-3e01-11f1-90a1-92fbcf53809c.png

点击可查看大图

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 瑞萨
    +关注

    关注

    38

    文章

    22518

    浏览量

    91180
  • 定时器
    +关注

    关注

    23

    文章

    3373

    浏览量

    124502
  • 脉宽
    +关注

    关注

    0

    文章

    40

    浏览量

    13177
  • GPT
    GPT
    +关注

    关注

    0

    文章

    372

    浏览量

    16960

原文标题:实验3:输入捕获脉宽和周期测量——瑞萨RA系列FSP库开发实战指南(101)

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA系列FSP开发实战指南I2C读写EEPROM实验

    使用官方提供的FPS进行编程,官方提供的FPS
    的头像 发表于 01-27 10:02 3773次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>I2C读写EEPROM<b class='flag-5'>实验</b>

    RA系列FSP开发实战指南GPT比较匹配功能及输入捕获功能详解

    比较匹配主要是用来实现输出PWM波形功能的一种机制。其原理简单来讲就是通过比较GTCNT计数器的值与GTCCRA或GTCCRB的值,当比较匹配发生时,会生成相应的比较匹配事件信号,同时,GPT可以
    的头像 发表于 04-20 15:08 3696次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b><b class='flag-5'>GPT</b>比较匹配功能及<b class='flag-5'>输入</b><b class='flag-5'>捕获</b>功能详解

    RA系列FSP开发实战指南使用GPT基本定时功能实验

    实验较为简单,我们将使用GPT定时器进行定时并产生中断请求触发中断,然后通过这个中断,切换LED的电平。
    的头像 发表于 04-20 15:23 4617次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>使用<b class='flag-5'>GPT</b>基本定时功能<b class='flag-5'>实验</b>

    e2studio(1)----芯片搭建FSP环境

    视频教学 样品申请 请勿添加外链 e2studio软件 e2studio是的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发
    发表于 09-30 15:28

    RA2L1入门学习】1. 点亮LED

    参考“RA2L1入门教学实验.pdf”进行的,之前使用过STM32CubeIDE和STM32CubeMX软件,
    发表于 01-29 22:17

    RA-Eco-RA4M2开发板评测】+VS Code 下 RA4M2 开发环境搭建与 GPIO 点灯实验教程

    软件烧录芯片程序——RA系列FSP开发
    发表于 04-15 15:12

    RA4系列开发板体验】开发环境搭建和新手点灯指南

    RA4系列开发板体验】开发环境搭建和新手点灯指南
    发表于 11-24 22:54

    RA4系列开发板体验】4. PWM驱动LED

    之前发帖:【RA4系列开发板体验】1. 新建工程+按键控制LED【
    发表于 12-04 18:23

    RA4系列开发板体验】10. 我的试用总结

    测量摇杆模块偏移量【RA4系列开发板体验】7. 用DAC输出正弦波以及余弦波【
    发表于 12-10 22:34

    RA4系列开发板体验】体验过程

    拿到板子之后,做了几个实验过程,过程如下:1、在好奇心驱动下,逐步接触;参照网上的实例,学习开发环境一、开箱验货二、搭建环境参考“ 【
    发表于 12-18 16:20

    M451的PWM如何设置才能捕获外部的脉冲,测量宽和周期

    M451的PWM,如何设置,来捕获外部的脉冲,测量宽和周期
    发表于 06-26 07:16

    【有奖直播预报名】电子RA系列产品开发工具FSP4.0.0新特性介绍

    为使用电子RA系列ARM微控制器的嵌入式系统设计提供简单易用且可扩展的高质量软件。 直播主题
    的头像 发表于 11-22 12:20 1703次阅读

    【视频教程】RA单片机FSP开发(3)FSP架构-解释Blinky架构[上]

    干货分享 前篇回顾 【视频教程】RA单片机FSP开发(1)环境搭建(带RASC) 【视频教程】
    的头像 发表于 12-06 12:15 2143次阅读

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南
    的头像 发表于 06-11 17:21 2235次阅读

    RA系列FSP开发实战指南使用GPT进行PWM输出实验

    本次实验需要使用到LED灯来展示定时的效果,LED灯具体的电路讲解请读者参考本教程:8.4.实验:使用寄存器点亮LED灯。
    的头像 发表于 04-24 10:45 152次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>使用<b class='flag-5'>GPT</b><b class='flag-5'>进行</b>PWM输出<b class='flag-5'>实验</b>