查看: 4750|回复: 1

[分享] LPC55S69之输入捕获

[复制链接]
  • TA的每日心情
    开心
    2025-7-10 13:07
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    56

    主题

    548

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1528

    热心会员

    最后登录
    2025-7-23
    发表于 2020-4-2 13:07:05 | 显示全部楼层 |阅读模式
    LPC55S69之输入捕获




    官方没有提供输入捕获的例子,这里介绍使用CTimer做为输入捕获。


    一、引脚。
    1.png
    二、代码。
    1. <font size="3" face="微软雅黑">#include "fsl_debug_console.h"
    2. #include "board.h"
    3. #include "fsl_ctimer.h"
    4. #include "pin_mux.h"
    5. #include <stdbool.h>

    6. #define CTIMER CTIMER2                 /* Timer 2 */
    7. void ctimer2_callback(uint32_t flags);
    8. static ctimer_callback_t ctimer_callback[] = {ctimer2_callback};
    9. uint8_t gCtimer100msFlag = 0 , gOverFlow = 0;
    10. uint32_t gDiffValue;
    11. uint32_t gCaptureTime;

    12. void ctimer2_callback(uint32_t flags) {
    13.         static uint8_t flag = 0;
    14.         static uint32_t first = 0 , second = 0;
    15.         if(flag == 0) {
    16.                 CTIMER_StartTimer(CTIMER);
    17.                 first = CTIMER_GetTimerCountValue(CTIMER);
    18.                 flag = 1;
    19.         } else {
    20.                 CTIMER_StopTimer(CTIMER);
    21.                 second = CTIMER_GetTimerCountValue(CTIMER);
    22.                 if(second >= first) {
    23.                         gDiffValue = second - first;
    24.                         gOverFlow = 0;
    25.                 } else {
    26.                         gDiffValue = first - second;
    27.                         gOverFlow = 1; // overflow
    28.                 }
    29.                 CTIMER_Reset(CTIMER);
    30.                 gCaptureTime = gDiffValue / (CLOCK_GetFroHfFreq() / 1000);
    31.                 flag = 0;
    32.                 gCtimer100msFlag = 1;
    33.         }
    34. }

    35. int main(void) {
    36.     ctimer_config_t config;

    37.     CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
    38.     CLOCK_AttachClk(kFRO_HF_to_CTIMER2); // 96MHz

    39.     BOARD_InitPins();
    40.     BOARD_BootClockPLL150M();
    41.     BOARD_InitDebugConsole();

    42.     CTIMER_GetDefaultConfig(&config);
    43.     config.input = kCTIMER_Capture_0;
    44.     CTIMER_Init(CTIMER, &config);
    45.     CTIMER_RegisterCallBack(CTIMER, &ctimer_callback[0], kCTIMER_SingleCallback);
    46.     CTIMER_SetupCapture(CTIMER, kCTIMER_Capture_0, kCTIMER_Capture_BothEdge, true);

    47.     PRINTF("CTimer Caputre\r\n");

    48.     while (1) {
    49.             if(gCtimer100msFlag == 1) {
    50.                     PRINTF("Caputure Once = %u\r\n",gDiffValue);
    51.                     PRINTF("Caputure Time = %u ms\r\n",gCaptureTime);
    52.                     gCtimer100msFlag = 0;
    53.             }
    54.     }
    55. }

    56. </font>
    复制代码
    三、说明。


    按下S3,也就是开发板上的USER键,可以捕获按下的时长。       
    2.png
    设置示波器为单次触发方式,可以看到按键按下的时长。
    3.png
    我这里使用默认新建的工程,不能计算浮点数,所以这里用了uint32_t来计算,能达到ms级精度。


    改为浮点数,可达到us级精度。


    新建工程时勾选红框所示,也不能使用%f来打印浮点数。
    7.png
    将所有代码移入官方提供的例子(lpcxpresso55s69_lpadc_temperature_measurement)中。
    4.png
    在SDK管理器中增加CTimer组件,重新编译、调试。
    5.png
    可以打印出浮点数了。
    6.png




    文章出处:点击

    签到签到
    回复

    使用道具 举报

    该用户从未签到

    6

    主题

    17

    帖子

    0

    注册会员

    Rank: 2

    积分
    199
    最后登录
    2023-12-4
    发表于 2023-1-3 15:05:39 | 显示全部楼层
    实际试了下,也初始化了PIN,并不能捕获按键
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-10 22:39 , Processed in 0.090677 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表