查看: 11208|回复: 16

[原创] 【从51到M0+】 SysTick

[复制链接]
  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
    发表于 2016-11-16 15:36:43 | 显示全部楼层 |阅读模式
    本帖最后由 邹姆斯特朗 于 2016-11-16 15:54 编辑

    软件平台:keil5.14
    硬件平台:LPC824Lite
    目的:认识M0+内核的SysTick定时器。
    .

    STC89C51
    51里好像没有这个东西。


    LPC824
    SysTick能产生定时的中断,类似于心跳吧,可以作为系统的基时。它是一个 24 位的定时器,即一次最多可以计数 2^24 ( =16777216)个时钟脉冲。
    其中主要配置的寄存器:
    1、STK_VAL :前计数值寄存器,脉冲计数值被保存到里面,只能向下计数,每接收到一个时钟脉冲 STK_VAL 的值就向下减 1,直至 0。触发异常,就可以在中断服务函数中处理定时事件了。
    2、STK_LOAD:重载寄存器,当 STK_VAL 的值被减至0 时,由硬件自动把重载寄存器 STK_LOAD中保存的数据加载STK_VAL,重新向下计数(填充值不能超过 2^24)。
    3、STK_CTRL: SysTick 配置,只有三个控制位和一个标志位,包括时钟源选择、使能、停止等。

    STK_CTRL的配置:
    这是一个32位的寄存器,但我们只需要配置其中3位即可
    0 bit:写1使能SysTick,写0停止
    1 bit:写1允许SysTick中断
    2 bit:写1选择系统时钟(30Mhz),写0选择1/2系统时钟(15Mhz)

    Tick.png
    现在编写一个SysTick定时翻转IO电平的程序,时钟源选择系统时钟(30Mhz),每两个tick之间间隔为1/30M 秒,30000个间隔,即是1ms的定时中断。中断服务函数为SysTick_Handler(void)。STK_CTRL的控制字0000 0000 0000 0111,即0x0007。
    1. /******************** Copyright(C) 2016, Lab1209 of UJN **********************
    2. * 文件名       :main.c
    3. * 描述         :SysTick实验
    4. *
    5. * 软件平台     :Keil5.14
    6. * 硬件平台     :LPC824
    7. *
    8. * 作者         :邹姆斯特朗
    9. * 修改时间     :2016/11/15
    10. * 补充         :
    11. ******************************************************************************/

    12. #include "peri_driver.h"

    13. #define   IN     0
    14. #define   OUT    1
    15. #define   LOW    0
    16. #define   HIGH   1

    17. /**************************************************************
    18. ** 名称   :SysTick_Handler(void)
    19. ** 描述   :SysTick中断服务函数      
    20. ** 参数   :   
    21. **                              
    22. ** 返回值 :   无
    23. ***************************************************************/
    24. void SysTick_Handler(void)
    25. {
    26.   Chip_GPIO_PinToggleState(LPC_GPIO_PORT, 0, 17);  //io电平翻转
    27. }


    28. /**************************************************************
    29. ** 名称   : main(void)
    30. ** 描述   : mian函数,SysTick初始化      
    31. ** 参数   :   
    32. **                              
    33. ** 返回值 :   无
    34. ***************************************************************/
    35. int main(void)
    36. {

    37.         Chip_GPIO_Init(LPC_GPIO_PORT);                      //初始化GPIO外设
    38.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 17, OUT);     //设置0.17脚方向为出
    39.   Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 17, LOW);   //设置0.17脚输出高低电平
    40.         
    41.         SysTick->LOAD  = 29999;                              //重装值,30M主频,tick之间间隔为1/30000000s,填充29999为定时1ms
    42.   SysTick->VAL   = 0;                                 
    43.         SysTick->CTRL  |= 0x0007;                           //使能SysTick,系统时钟30M为时钟
    44.         
    45. }
    复制代码
    1ms.png

    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2016-11-16 16:55:31 | 显示全部楼层
    朋友      我想加你联系方式  一起学习               
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-31 22:07
  • 签到天数: 29 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    20

    主题

    385

    帖子

    19

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2087
    最后登录
    2020-7-1
    发表于 2016-11-16 22:41:04 | 显示全部楼层
    SysTick->CTRL是32位寄存器,控制字应该是0x00000007
    粗心了吧
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16697
    最后登录
    1970-1-1
    发表于 2016-11-16 23:56:26 | 显示全部楼层
    不错,  
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-11-17 08:04:52 | 显示全部楼层
    51的肯定没有,这是CM系列内核特有的,专门给OS用的,只要CM内核的芯片无论哪家的都有这个东西的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-17 08:07
  • 签到天数: 273 天

    连续签到: 1 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7508
    最后登录
    2021-8-30
    发表于 2016-11-17 08:20:19 | 显示全部楼层
    楼主真是有心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2016-11-17 16:33:37 | 显示全部楼层
    laosheng886 发表于 2016-11-16 16:55
    朋友      我想加你联系方式  一起学习

    可以加群相互学习467719590
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2016-11-17 16:34:04 | 显示全部楼层
    1209实验室@ujn 发表于 2016-11-16 22:41
    SysTick->CTRL是32位寄存器,控制字应该是0x00000007
    粗心了吧

    尴尬了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2016-11-17 16:34:18 | 显示全部楼层
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-22 13:56
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    20

    主题

    644

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1820
    最后登录
    2020-10-13
     楼主| 发表于 2016-11-17 16:34:46 | 显示全部楼层
    技术范儿 发表于 2016-11-17 08:04
    51的肯定没有,这是CM系列内核特有的,专门给OS用的,只要CM内核的芯片无论哪家的都有这个东西的 ...

    原来如此,学习了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 08:57 , Processed in 0.102612 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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