第五章节拍定时器

上传人:re****.1 文档编号:496136159 上传时间:2023-07-14 格式:DOC 页数:10 大小:243KB
返回 下载 相关 举报
第五章节拍定时器_第1页
第1页 / 共10页
第五章节拍定时器_第2页
第2页 / 共10页
第五章节拍定时器_第3页
第3页 / 共10页
第五章节拍定时器_第4页
第4页 / 共10页
第五章节拍定时器_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《第五章节拍定时器》由会员分享,可在线阅读,更多相关《第五章节拍定时器(10页珍藏版)》请在金锄头文库上搜索。

1、第五章 节拍定时器5.1节拍定时器概述STM32F10X内核中有一个节拍定时器。节拍定时器为一个24位递减计数器,节拍定时器设定初值并使能后,每经过1个系统时钟周期,计数值就减 1。当计数值递减到 0时,节拍定时器自动重装初值,并继续向 下计数,同时内部的 COUNTFLAG 标志会置位,触发中断 (如果中断使能)。节拍定时器,其功能简单,只能提供一个节拍定时用,一般作为系统的嘀嗒。在使用外部晶振为8MHz9倍频,系统时钟为 72MHz节拍定时器的递减频率可以设为9MHz (如HCLK/8)。在这个条件下,把系统定时器的初始值设置成 90000,就能够产生10ms的时间基值,如果开启中断,则产

2、生10ms的中断。利用ST的函数库使用systick的方法1、 调用 SysTick_CounterCmd()失能 SysTick 计数器2、调用 SysTick_ITConfig () 失能 SysTick 中断3、调用 SysTick_CLKSourceConfig() 设置 SysTick 时钟源。4、调用 SysTick_SetReload() 设置 SysTick 重装载值。5、调用 SysTick_ITConfig () 使能 SysTick 中断6、 调用 SysTick_CounterCmd()开启 SysTick 计数器 下面部分我们分别来介绍这几个库函数。5.2库函数介绍5

3、.2.1 函数 SysTick_CLKSourceConfigSysTick_CLKSourceConfig函数,其功能为设置 SysTick时钟源。表 5-2-1.描述了函数 SysTick CLKSourceConfig函数名SysTick_CLKSourceCo nfig函数原形void SysTick CLKSourceCo nfig(u32 SysTick CLKSource)功能描述设置SysTick时钟源输入参数SysTick CLKSource : SysTick 时钟源输出参数无返回值无先决条件无被调用函数无表5-2-2列举了 SysTick_CLKSource 参数允许取值

4、范围 表 5-2-2 SysTick CLKSource 值SysTick CLKSource参数可取的值描述SysTick CLKSource HCLK Div8SysTick时钟源为AHB时钟除以8SysTick CLKSource HCLKSysTick时钟源为AHB时钟例:设置系统定时器时钟为AHB寸钟SysTick_CLKSourceCo nfig(SysTick_CLKSource_HCLK);5.2.2 函数 SysTick_SetReload函数SysTick_SetReload的功能为设置SysTick重装载值。 表 5-2-3描述了函数 SysTick_SetReload函

5、数名SysTick_SetReload函数原形void SysTick_SetReload(u32 Reload)功能描述设置SysTick重装载值输入参数Reload:重装载值,该参数取值必须在1和0x00FFFFFF之间输出参数无返回值无先决条件1 无被调用函数无例:设定系统定时器的重载值为 90000SysTick_SetReload(90000);523 函数 SysTick_CounterCmd函数SysTick_CounterCmd的功能为使能或者失能 SysTick计数器 表 5-2-4.描述了函数 SysTick_CounterCmd函数名SysTick_Cou nterCmd

6、函数原形void SysTick_Cou nterCmd(u32 SysTick_Cou nter)功能描述使能或者失能SysTick计数器输入参数SysTick Counter : SysTick 计数器新状态输出参数无返回值无先决条件无被调用函数无表5-2-5列举了 SysTick_Counter参数可取的值。 表 5-2-5. SysTick Counter 值SysTick Counter参数可取的值描述SysTick Co un ter Disable失能计数器SysTick Counter Enable使能计数器SysTick Co un ter Clear清除计数器值为0例:使能

7、系统定时器SysTick_Cou nterCmd(SysTick_Cou nter_E nable);5.2.4 函数SysTick_ITConfig函数SysTick_ITConfig的功能是使能或者失能 SysTick中断。 表 5-2-6.描述了函数 SysTick ITConfig函数名SysTick ITCo nfig函数原形void SysTick ITConfig(FunctionalState NewState)功能描述使能或者失能SysTick中断输入参数NewState : SysTick中断的新状态, 这个参数可以取:ENABLE或者DISABLE :输出参数无返回值无先

8、决条件:无被调用函数无例:使能系统定时器中断SysTick_ITC on fig(ENABLE);525 函数SysTick_GetCounter函数SysTick_GetCounter的功能是获取 SysTick计数器的值。 表 5-2-7 描述了函数 SysTick_GetCounter函数名SysTick_GetCou nter函数原形u32 SysTick_GetCou nter(void)功能描述获取SysTick计数器的值输入参数无输出参数无返回值SysTick计数器的值先决条件无被调用函数无例:获取系统定时器的计数值u32 SysTickCurre ntCou nterValue

9、;SysTickCurre ntCou nterValue = SysTick_GetCou nter();5.3节拍定时器试验1嘀嗒实例5.3.1实验要求利用节拍定时器,每 10毫秒中断一次,每 500毫秒跳变一次LED8。5.3.2软件结构在程序中,需要初始化节拍定时器,使节拍定时器每10ms重载一次,并开启节拍定时器中断。在中断程序中,每进入一次中断,让一计数变量加1,然后判断是否有 50次,如果有50次,则跳变一下LED8 灯,同时把计数变量清0。这样程序运行时 LED8灯就不停地闪烁。图 5-3-1是程序的流程图。软件流程图5.3.3实例代码以队列收发数据为基础,来进行添加。首先创建

10、E:OpenM3V开发板测试程序SysTicksys_delay 文件夹,把E:OpenM3V开发板测试程序USARTUSART3文件夹中的工程,复制到E:OpenM3V开发板测试程 序SysTicksys_delay文件夹中,编译下载,看程序复制是否正确,这一步很关键,在作任何更改前,必须验证前一步的正确和完整性。对其的态度是,宁愿认为其是错误的,也不要去假设它是正确的。所有正确的东西,必须要实际测 试后才能确定。有时看似麻烦的东西,却能节省好多时间和精力,并给我们对下一步的信心。验证通过后,点击 图标,在编辑对话框中出现一个新的空白文档,在这个文档中加入以下这部分 内容,然后点击存盘,文件

11、保存在本工程文件所在地文件夹中,命名为systic.c。这个文件中,存放系统定时器初始化有关的所有程序代码和函数。同时把这个文件加入到文件组USER中。下面是systic.c文件中系统定时器初始化的程序清单:#include stm32f10x_lib.h un sig ned char sys_n ub;/系统定时器中断计数变量/SysTick 设置void SysTick_C on fig(void)/ 失能SysTick定时器 SysTick_Cou nterCmd(SysTick_Cou nter_Disable);/ 失能SysTick中断SysTick_ITC on fig(DIS

12、ABLE);/ 设置SysTick时钟源SysTick_CLKSourceCo nfig(SysTick_CLKSource_HCLK_Div8);/ 设置SysTick重载值,10ms重载一次,在 72Mhz时钟下 SysTick_SetReload(90000);/ 开SysTick中断 SysTick_ITC on fig(ENABLE);II 开SysTick定时器SysTick_Cou nterCmd(SysTick_Cou nter_E nable);点击I图标,在编辑对话框中出现一个新的空白文档,在这个文档中加入以下这部分内容,然后点击存盘,文件保存在本工程文件所在地文件夹中,命

13、名为systic.h。void SysTick_C on fig(void);exter n un sig ned char sys_ nub;在stm32f10x_it.c文件中,加入头函数systic.h,在系统中断定时器中断函数void SysTickHandler(void)中加入以下程序代码:void SysTickHa ndler(void)sys_nub+;系统定时器中断计数变量加1if(sys_nub 49)II计数到 50 时sys_nub = 0;II清0计数变量LED8B();跳转 LED8 灯在主函数中加入头文件systic.h,并加入系统定时器初始化函数SysTick

14、_Co nfig()。程序代码分析:在main函数中,首先启动时钟和初始化嵌套向量中断控制器( NVIC),然后再调用I/O 口、串口系 统定时器初始化函数。在系统定时器中断中计数中断次数,当达到50次时,跳转LED8灯。5.3.4编译下载和调试通过ProjectRebuild All命令进行编译。编译通过后,在其工程文件夹下DebugExe目录下有一个.HEX后缀的文件,此为可执行文件,使用ST提供的下载工具,以ISP方式把程序下载到芯片中。复位系统,可以看到LED8每秒钟闪烁一次。打开串口调试助手,可以看到,PC机发送什么数据,串口也能接收到相同的数据。5.4有实际应用意义的键盘实例5.4

15、.1实验要求有了这个节拍定时器实验后,回过头来看前面的按键和串口还有LED灯,下面来做一个把三者结合起来的实验。实验设计要求是,实现真正的按键功能,每按一次键,系统只识读一次,而不管按多长时 间。前面讲叙的按键识别没有进行防抖处理,在这里,使用系统定时器,来实现键盘防抖功能。具体要 求是:每按K1键一次,LED1灯翻转一次,同时通过串口 1发送0X31这个数据;每按K2键一次,LED2 灯翻转一次,同时通过串口发送0X32这个数据;每按 K7键一次,LED7灯翻转一次,同时通过串口 1发送0X37这个数据。5.4.2软件结构在这个键盘扫描程序的逻辑有点复杂,可以利用串口,把中间变量传出来,查看程序的流程和变量 的值,方便调试,找出错误所

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号