- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 中医气功学导论期末试卷.docx
- 请你谈一下你为什么要加入中国共产党谈谈为什么加入中国共产党.pptx VIP
- 2024南方电网广西电网公司校园招聘公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- DB37T19976—2011山东物业服务规范第1部分住宅物业.doc
- 七年级心理健康教案完整版.docx
- 赤泥综合利用项目可行性研究报告(完整案例).pdf
- 2024款比亚迪海豹06DM-i豪华型尊贵尊荣尊享旗舰_用户手册驾驶指南车主车辆说明书电子版.pdf
- 企业技术改造资金绩效评价总结报告.doc
- 《生物化学》全套教学课件(共13章完整版).pptx
- 15-彭向刚-学习领导科学提升领导力(清华)__(全国各校课件参考).ppt
文档评论(0)