查看: 1569|回复: 5

[原创] 【MCX-A153分享】4、定时器实现非阻塞循环灯

[复制链接]
  • TA的每日心情
    开心
    2025-1-21 10:02
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    15

    主题

    3628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2950
    最后登录
    2025-8-14
    发表于 2024-7-16 11:29:19 | 显示全部楼层 |阅读模式
           在上一节中我们实现了循环点灯的操作做,通过在while中延时的方法实现的,这种阻塞式的循环灯的方法基本上也就式用在点灯这样的初级操作这里,这种延时对于系统的实时性非常不好,这一节我们就用定时器的方式实现循环灯操作,通过定时达到要求后执行相应的操作,定时器定时功能有几方面优势,其一就是定时精准,延时咱们看着式精准的实际上差的还是不少的,也是通过不断的调整才得到了一个差不多的延时,而定时器可以实现精准定时;第二个就是定时时间到了后是在终端中处理内容,优先级更高。
           接下来我们就实现循环点亮LED(定时器,循环间隔500mms)。
           使用配置工具添加外设——LPTMR,并配置为基础定时器功能(10ms):
    1.png

           这里有一个优点就是你可以添加频率单位,也可以直接填写时间,对应的prescaler都会直接生成,更新初始化代码;
    2.png

           中断回调函数可以直接在这里进行举例,复制过去修改就可以了;
           可以看到初始化都已经自动生成了:
    3.png

           配置完成,中断开启并配置,定时器启动;
           编写定时器中断函数:
    1. void LPTMR0_IRQHandler(void) {
    2.   LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);

    3.   /* Place your code here */
    4.   cnt++;
    5.   if(cnt > 50)
    6.   {
    7.       cnt = 0;
    8.       LED_state++;
    9.       if(LED_state == 99)
    10.           LED_state = 0;
    11.   }

    12.   /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F
    13.      Store immediate overlapping exception return operation might vector to incorrect interrupt. */
    14.   #if defined __CORTEX_M && (__CORTEX_M == 4U)
    15.     __DSB();
    16.   #endif
    17. }
    复制代码
          修改主函数:
    1. uint16_t cnt = 0;
    2. uint8_t LED_state = 0;
    3. uint8_t LED_Oldstate = 1;

    4. while (1)
    5. {
    6.     if(LED_state != LED_Oldstate)
    7.     {
    8.         LED_Oldstate = LED_state;
    9.         LED_BLUE_OFF();
    10.         LED_GREEN_OFF();
    11.         LED_RED_OFF();
    12.         switch(LED_Oldstate%3)
    13.         {
    14.             case 0:
    15.                 LED_RED_ON();
    16.                 break;
    17.             case 1:
    18.                 LED_GREEN_ON();
    19.                 break;
    20.             case 2:
    21.                 LED_BLUE_ON();
    22.                 break;
    23.             default:
    24.                 break;
    25.         }
    26.     }
    27. }
    复制代码
          效果如下:
    效果展示.gif
    早上开心
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 155 天

    连续签到: 1 天

    [LV.7]常住居民III

    0

    主题

    258

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1447
    最后登录
    2025-8-14
    发表于 2024-7-17 08:57:15 | 显示全部楼层
    学习一下
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 960 天

    连续签到: 18 天

    [LV.10]以坛为家III

    14

    主题

    4579

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7664
    最后登录
    2025-8-14
    发表于 2024-12-5 10:46:31 | 显示全部楼层
    本帖最后由 ldptest 于 2024-12-5 10:47 编辑

    请教大侠
    这个Prescaler起什么作用?
    批注 2024-12-05 104456.png
    永远开心快乐
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-4-15 14:49
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    19

    主题

    132

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1237
    最后登录
    2025-7-11
    发表于 2024-12-5 11:00:21 | 显示全部楼层
    ldptest 发表于 2024-12-5 10:46
    请教大侠
    这个Prescaler起什么作用?

    对时钟源进行分频。好像是上面的24M/2=12M
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 960 天

    连续签到: 18 天

    [LV.10]以坛为家III

    14

    主题

    4579

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7664
    最后登录
    2025-8-14
    发表于 2024-12-5 11:07:42 | 显示全部楼层
    waterkingchen 发表于 2024-12-5 11:00
    对时钟源进行分频。好像是上面的24M/2=12M

    我选了2048都不会改变
    批注 2024-12-05 104456.png
    永远开心快乐
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 960 天

    连续签到: 18 天

    [LV.10]以坛为家III

    14

    主题

    4579

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7664
    最后登录
    2025-8-14
    发表于 2024-12-9 14:44:34 | 显示全部楼层
    ldptest 发表于 2024-12-5 11:07
    我选了2048都不会改变

    终于明白为什么不会改变了。
    因为选了这个,居然没留意

    bypass.png
    永远开心快乐
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-14 18:45 , Processed in 0.078041 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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