查看: 8088|回复: 9

[原创] 【LPC11U68】+定时器延时函数

[复制链接]
  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2205
    最后登录
    2025-2-22
    发表于 2018-11-10 21:38:00 | 显示全部楼层 |阅读模式
    11U68除了Crotex-m都有的滴答定时器外,还有4个定时器(就找到4个,不知道还有没有),#define LPC_TIMER16_0#define LPC_TIMER16_1
    #define LPC_TIMER32_0
    #define LPC_TIMER32_1

    两个16位定时器,两个32位定时器
    之前有大佬用timer做的PWM,这里分享一下我用定时器的延时函数,定时器的时钟是48Mhz,进行23分频,然后计数器每增一次就是1us,用这个做us级延时,对于我来说已经够用了。
    不用滴答定时器做延时是因为跑系统的话就要更改延时函数。

    0.png
    很简单的应用,初始化-》设置预分频-》重启定时器-》等待计数值到达-》关闭定时器,这里计数器是递增的,所以等待计数器增到我们想要的。
    用逻辑分析仪简单测了一下,
    1.png
    500us的延时测出来是506.333us,不知道是什么问题,不过这个对于我来说已经够用了,如果有什么问题,希望大家指正。

    1. void Delay_Init(void)
    2. {
    3.         /* Initialize 32-bit timer 0 clock */
    4.         LPC_SYSCTL->SYSAHBCLKCTRL |= (1 << SYSCTL_CLOCK_CT32B0);                //初始化32位定时器
    5.        
    6.         /* Setup prescale value on 32-bit timer to extend range */
    7.         LPC_TIMER32_0->PR = 23;  //分频值23  1us计数一次
    8. }


    9. void delay_us(uint32_t us)
    10. {
    11.         Chip_TIMER_Reset(LPC_TIMER32_0);        //计数器设置为0       
    12.         LPC_TIMER32_0->TCR |= TIMER_ENABLE;                        //使能定时器       
    13.         while(LPC_TIMER32_0->TC<us);                        //等待计数值,这里为递增计数
    14.         LPC_TIMER32_0->TCR &= ~TIMER_ENABLE;                //关闭定时器
    15. }

    16. void delay_ms(uint16_t ms)
    17. {
    18.         uint32_t us;
    19.         us = 1000*ms;
    20.         Chip_TIMER_Reset(LPC_TIMER32_0);        //计数器设置为0       
    21.         Chip_TIMER_Enable(LPC_TIMER32_0);                        //使能定时器       
    22.         while(Chip_TIMER_ReadCount(LPC_TIMER32_0)<us);                        //等待计数值,这里为递增计数
    23.         Chip_TIMER_Disable(LPC_TIMER32_0);                //关闭定时器
    24. }
    复制代码



    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-11 19:59
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    3

    主题

    27

    帖子

    1

    注册会员

    Rank: 2

    积分
    190
    最后登录
    2019-1-25
    发表于 2018-11-11 07:20:55 | 显示全部楼层
    d为你点赞!
    做人,最重要的就是开心啦!
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 20:21
  • 签到天数: 1857 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112660
    最后登录
    2025-8-4
    发表于 2018-11-12 08:23:55 | 显示全部楼层
    为什么预分频是23?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2205
    最后登录
    2025-2-22
     楼主| 发表于 2018-11-12 08:33:55 | 显示全部楼层
    stm1024 发表于 2018-11-12 08:23
    为什么预分频是23?

    根据正点原子的资料算的 2.png
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-11-22 09:55
  • 签到天数: 179 天

    连续签到: 1 天

    [LV.7]常住居民III

    12

    主题

    1122

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1377
    最后登录
    2019-11-22
    发表于 2018-11-19 10:02:34 | 显示全部楼层
    那个分频值怎么不是47的,48MHz/(47+1) = 1MHz,  时间= 1/1Mhz = 1us,不是这样子算的吗
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2205
    最后登录
    2025-2-22
     楼主| 发表于 2018-11-19 10:57:30 | 显示全部楼层
    队长shiwo 发表于 2018-11-19 10:02
    那个分频值怎么不是47的,48MHz/(47+1) = 1MHz,  时间= 1/1Mhz = 1us,不是这样子算的吗 ...

    好像也是啊,这个说实话我也不是很清楚,算得可能有问题,但是我这个时间测出来又是对的
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-11-22 09:55
  • 签到天数: 179 天

    连续签到: 1 天

    [LV.7]常住居民III

    12

    主题

    1122

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1377
    最后登录
    2019-11-22
    发表于 2018-11-19 12:57:35 | 显示全部楼层
    mzy2364 发表于 2018-11-19 10:57
    好像也是啊,这个说实话我也不是很清楚,算得可能有问题,但是我这个时间测出来又是对的 ...

    还有一个ARR值的,应该是在匹配寄存器里的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-5-7 08:45
  • 签到天数: 279 天

    连续签到: 1 天

    [LV.8]以坛为家I

    114

    主题

    1314

    帖子

    29

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    10997

    热心会员

    最后登录
    2025-8-5
    发表于 2018-11-19 13:38:49 | 显示全部楼层
    本帖最后由 az158 于 2018-11-19 13:41 编辑

    话说LPC的写法不应该参照STM32的写法,完全不是一个东西(内核级别的可以看一下),我简单找了一下(刚刚开始玩LPC,还没整理工程)
    QQ截图20181119125706.png
    这里说明了为啥要减1,这里说当pc与pr匹配的时候将在下一个时钟到来的时候清0,还举了个例子,当pr设为1的时候,实际分频为2、
    然后是主频
    QQ截图20181119130146.png
    这里可以看出32位定时器的时钟来源是system clock
    QQ截图20181119133316.png
    可以在工程里找到这个(再深入就不想看了,麻烦。。。。以后写贴子的时候可能写)
    很明显system clock频率为24MHz
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2205
    最后登录
    2025-2-22
     楼主| 发表于 2018-11-19 14:36:21 | 显示全部楼层
    az158 发表于 2018-11-19 13:38
    话说LPC的写法不应该参照STM32的写法,完全不是一个东西(内核级别的可以看一下),我简单找了一下(刚刚开 ...

    系统时钟还是48M   应该是定时器的时钟是24M
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2205
    最后登录
    2025-2-22
     楼主| 发表于 2018-11-19 14:37:23 | 显示全部楼层
    队长shiwo 发表于 2018-11-19 12:57
    还有一个ARR值的,应该是在匹配寄存器里的

    反正这样测出来时间就是这样,可能是定时器的时钟是24M
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-5 15:08 , Processed in 0.118375 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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