查看: 2929|回复: 0

[分享] LPC55S69之定时器

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

    连续签到: 1 天

    [LV.5]常住居民I

    56

    主题

    546

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1524

    热心会员

    最后登录
    2025-7-10
    发表于 2020-4-3 12:46:29 | 显示全部楼层 |阅读模式
    LPC55S69之定时器


    用CTimer来产生100ms和1s标志位,用于在主循环中使用。


    一、引脚。


    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. #define CTIMER_MAT_OUT kCTIMER_Match_1 /* Match output 1 */
    8. #define CTIMER_CLK_FREQ CLOCK_GetCTimerClkFreq(2U)
    9. void ctimer2_callback(uint32_t flags);
    10. volatile uint32_t g_pwmPeriod   = 0U;
    11. volatile uint32_t g_pulsePeriod = 0U;
    12. static ctimer_callback_t ctimer_callback[] = {ctimer2_callback};

    13. volatile uint32_t gCtimer100msCnt = 0U;
    14. volatile uint32_t gCtimer100msFlag = 0U;
    15. volatile uint32_t gCtimer1sFlag = 0U;

    16. status_t CTIMER_GetPwmPeriodValue(uint32_t pwmFreqHz, uint8_t dutyCyclePercent, uint32_t timerClock_Hz) {
    17.     g_pwmPeriod = (timerClock_Hz / pwmFreqHz) - 1;
    18.     if (dutyCyclePercent == 0) {
    19.         g_pulsePeriod = g_pwmPeriod + 1;
    20.     } else {
    21.         g_pulsePeriod = (g_pwmPeriod * (100 - dutyCyclePercent)) / 100;
    22.     }
    23.     return kStatus_Success;
    24. }

    25. void ctimer2_callback(uint32_t flags) {
    26.         gCtimer100msFlag = 1;
    27.         if(gCtimer100msCnt > 9) {
    28.                 gCtimer1sFlag = 1;
    29.                 gCtimer100msCnt = 0;
    30.         } else {
    31.                 gCtimer100msCnt++;
    32.         }
    33. }

    34. int main(void) {
    35.     ctimer_config_t config;
    36.     uint32_t timerClock;
    37.     uint8_t flag1 = 0,flag2 = 0;

    38.     CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
    39.     CLOCK_AttachClk(kFRO_HF_to_CTIMER2);

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

    43.     CTIMER_GetDefaultConfig(&config);
    44.     timerClock = CTIMER_CLK_FREQ / (config.prescale + 1);
    45.     CTIMER_Init(CTIMER, &config);
    46.     CTIMER_RegisterCallBack(CTIMER, &ctimer_callback[0], kCTIMER_SingleCallback);
    47.     CTIMER_GetPwmPeriodValue(10, 50, timerClock); // 10Hz = 100ms中断一次
    48.     CTIMER_SetupPwmPeriod(CTIMER, CTIMER_MAT_OUT, g_pwmPeriod, g_pulsePeriod, true);
    49.     CTIMER_StartTimer(CTIMER);

    50.     while (1) {
    51.             if(gCtimer100msFlag == 1) {
    52.                     if(flag1 == 0) {
    53.                             GPIO_PinWrite(BOARD_INITPINS_OUT1_GPIO,BOARD_INITPINS_OUT1_PORT,BOARD_INITPINS_OUT1_PIN,0);
    54.                             flag1 = 1;
    55.                     } else {
    56.                             GPIO_PinWrite(BOARD_INITPINS_OUT1_GPIO,BOARD_INITPINS_OUT1_PORT,BOARD_INITPINS_OUT1_PIN,1);
    57.                             flag1 = 0;
    58.                     }
    59.                     gCtimer100msFlag = 0;
    60.             } else if(gCtimer1sFlag == 1) {
    61.                     if(flag2 == 0) {
    62.                             GPIO_PinWrite(BOARD_INITPINS_OUT2_GPIO,BOARD_INITPINS_OUT2_PORT,BOARD_INITPINS_OUT2_PIN,0);
    63.                             flag2 = 1;
    64.                     } else {
    65.                             GPIO_PinWrite(BOARD_INITPINS_OUT2_GPIO,BOARD_INITPINS_OUT2_PORT,BOARD_INITPINS_OUT2_PIN,1);
    66.                             flag2 = 0;
    67.                     }
    68.                     gCtimer1sFlag = 0;
    69.             }
    70.     }
    71. }</font>
    复制代码
    三、其它问题。


    使用CTimer0、1、3、4时,发现


    timerClock = CTIMER_CLK_FREQ / (config.prescale + 1);的CTIMER_CLK_FREQ为0,将其改为96000000即可。






    文章出处:点击

    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 06:59 , Processed in 0.077862 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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