S.D.Lu的STM32学习笔记(四)用SysTick定时器实现延时.docVIP

S.D.Lu的STM32学习笔记(四)用SysTick定时器实现延时.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
S.D.Lu的STM32学习笔记(四)用SysTick定时器实现延时

S.D.Lu的STM32学习笔记(4) 用SysTick定时器实现延时 概述: 本篇将介绍如何使用CM3核内置的SysTick定时器实现较精确的延时。 由于3.5.0版的固件函数库并没有提供完整的SysTick定时器操作函数,所以我们将通过对寄存器的操作完成SysTick定时器相关设置,借此机会学习一下STM32的寄存器操作方法。 SysTick 定时器是一个包含在CM3 内核的处理器内部的24位倒计数定时器。SysTick定时器的介绍请参考《Cortex-M3权威指南》第8章以及《CM3技术参考手册》第8章与SysTick相关的内容。 说明: 本篇通过一个实例,解决一个问题,然后分析解决的方法。 本实验是在前一篇的基础上进行的,参考了网络上的程序资源。 利用定时器,使用查询的方式实现延时的基本流程是: 清空标志位; 填充初值; 打开定时器; 查询标志位,直到其置1; 关闭定时器; 清空标志位。 使用SysTick定时器实现延时的流程与之类似: (使用SysTick前先设置其时钟源) 清空计数器及标志位; 填充重载寄存器; 打开定时器; 查询标志位,直到其置1; 关闭定时器; 清空计数器及标志位。 步骤1:修改main.c文件 在文件开始出添加一个宏定义: #define MY_SYSCLK 32 //时钟频率MHz 删掉原来的延时函数,然后写两个函数: //函数功能:设置SysTick时钟源===== void SysTick_Init(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //SysTick时钟 = AHB时钟/8 } //函数功能:延时nms毫秒===== void Delay_ms(u32 nms) { u32 temp; temp = (u32)MY_SYSCLK*1000/8*nms; //计算初值 SysTick-LOAD = temp; //填充初值 SysTick-VAL=0x00; //清空计数器及标志位 SysTick-CTRL=0x01 ; //打开定时器 do { temp=SysTick-CTRL; } while(temp0x01!(temp(116)));// 查询标志位,直到其置1 SysTick-CTRL=0x00; //关闭定时器 SysTick-VAL =0X00; //清空计数器及标志位 } 主函数改成如下内容: int main(void) //函数功能:主函数 { RCC_Configuration(); //初始化外设时钟 PORT_Init(); //初始化I/O端口 SysTick_Init(); //设置SysTick时钟源 while(1) { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET); //PA8 = 1 Delay_ms(500); //延时500毫秒 GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET); //PA8 = 0 Delay_ms(500); //延时500毫秒 } } 步骤2:编译,下载 将工程进行编译,下载到芯片上,即可看到LED在闪烁,周期为1秒钟。 至此实验完成。 代码分析: 所增加的SysTick_Init()函数只调用了一个库函数:SysTick_CLKSourceConfig(); 该函数的功能是选择SysTick定时器的时钟。 这是3.5.0库提供的唯一一个SysTick定时器操作函数。 《STM32固件库使用手册》中文版(UM0427)翻译自英文版UM0427 Oct. 2007 Rev 2。该版本是ST公司2007年10月发布的1.0版固件库使用手册,也就是最早的版本。后期的版本,特别是3.0之后的版本改动较大,但很多函数都保留了原来的接口,所以可以按照1.0版的使用手册进行调用。如果有改动,也可以根据固件库中的函数定义处的注释知道其使用方法。有些函数被废弃了,如对SysTick定时器的操作,3.5.0版的函数库只提供了一个可用的SysTick_CLKSourceConfig()。这样,用户只能通过直接操作寄存器完成其他相应的设置。 增加的另一个函数是:Delay_ms(); 其功能是实现n毫秒延时。但应注意的是,该函数的输入应确保MY_SYSCLK*1000/8*nms = 0x00FFFFF。其中MY_SYSCLK是文件开头定义的宏,标识使用的系统时钟频率,单位:MHz。本程序沿用了上一篇的RCC_C

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档