15.12、 TIMER定时器中断实验.pdf

上传人:紫竹语嫣 文档编号:5514337 上传时间:2020-05-27 格式:PDF 页数:9 大小:392.33KB
返回 下载 相关 举报
15.12、 TIMER定时器中断实验.pdf_第1页
第1页 / 共9页
15.12、 TIMER定时器中断实验.pdf_第2页
第2页 / 共9页
15.12、 TIMER定时器中断实验.pdf_第3页
第3页 / 共9页
15.12、 TIMER定时器中断实验.pdf_第4页
第4页 / 共9页
15.12、 TIMER定时器中断实验.pdf_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《15.12、 TIMER定时器中断实验.pdf》由会员分享,可在线阅读,更多相关《15.12、 TIMER定时器中断实验.pdf(9页珍藏版)》请在三一文库上搜索。

1、 TIMER定时器中断实验定时器中断实验 ? 意义与作用意义与作用 对于TIMER定时器大家应该不会陌生, 51单片机内部就有定时器, 作为高性能的STM32 开发板自然少不了对其介绍。定时器属于STM32处理器的内部资源。神舟系列的本例程通 过TIMER定时器, 产生的中断定时在串口输出打印信息。 我们按照以下的几个部分对STM32 处理器的TIMER进行学习。 ? 实验原理实验原理 神舟IV开发板使用的处理器是ARM CORTEX-M3系列的STM32F107VCT,其内部含 有多达10个定时器,包括: 多达4个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的

2、通道和增量编码器输入 1个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器 2个看门狗定时器(独立的和窗口型的) 系统时间定时器:24位自减型计数器 2个16位基本定时器用于驱动DAC 按功能分为:按功能分为: 2个高级控制定时器(两个高级控制定时器TIM1和TIM8,可以被看成是分配到6个通道 的三相PWM发生器,它具有带死区插入的互补PWM输) 4个普通定时器(达4个可同步运行的标准定时器TIM2、TIM3、TIM4和TIM5) 2个基本定时器(这2个定时器主要是用于产生DAC触发信号,也可当成通用的16位时基 计数器) 2个看门狗定时器 1个系统嘀嗒定时器SysTick。

3、下表比较了高级控制定时器、普通定时器和基本定时器的功能: 前面我们已经介绍了系统嘀嗒定时器SysTick的使用,本次示例以通用定时器TIM5为 例来完成一个一秒中断一次的基本功能。通用定时器介绍如下: 通用定时器(TIMx) STM32F107xC系列产品中,内置了多达4个可同步运行的标准定 时器(TIM2、TIM3、TIM4和TIM5)。每个定时器都有一个16位的自动加载递加/递减计数 器、一个16位的预分频器和4个独立的通道, 每个通道都可用于输入捕获、 输出比较、 PWM 和单脉冲模式输出, 在最大的封装配置中可提供最多16个输入捕获、 输出比较或PWM通道。 它们还能通过定时器链接功能

4、与高级控制定时器共同工作, 提供同步或事件链接功能。 在调 试模式下,计数器可以被冻结。任一标准定时器都能用于产生PWM输出。每个定时器都有 独立的DMA请求机制。 这些定时器还能够处理增量编码器的信号,也能处理1至3个霍尔 传感器的数字输出。 STM32定时器定时时间的计算定时器定时时间的计算 首先我们来看一下如何计算定时器的时间来完成一个一秒中断一次的基本功能。 假如系统时钟是 72Mhz,如上图所示 TIM2-7 是由 PCLK1 得到,一般的配置包括我 们本次的示例中 PCLK2 = HCLK(72MHz) 。也就是说本次示例中 TIM5 模块入口时钟是 72Mhz。 TIM5 模块入

5、口时钟经过一个预分频器后的时钟才是 TIM5 计数器的时钟 (用 CK_CNT 表示) 。预分频器的系数为:TIMx_PSC ,当 TIMx_PSC=0 时表示不分频,则 TIM5 计 数器的时钟用 CK_CNT=模块入口时钟 72Mhz; 当 TIMx_PSC=1 时表示不分频, 则 TIM5 计数器的时钟用 CK_CNT=模块入口时钟 36Mhz;以此类推。 公式为:CK_CNT= fCK_PSC/(PSC15:0+1),其中 PSC 最大为 65535。 其次是 TIM5 计数器的计数值的设置,TIM5 计数器以 CK_CNT 为时钟来计数,向下 计数到 0 或向上计数到设定值(TIMx

6、_ARR)则产生中断。我们以向上计数为例,从 0 开 始计数到设定值 TIMx_ARR 时产生中断。要产生一秒一次中断则要使计数器的值乘以预分 频值=系统时钟 72MHz,其中计数器的值和预分频值都必须小于 65535。我们使预分频值 为 7200,计数器值为 10000,则 7200 * 10000 = 7200000 即 72M。其中拆分法有 很多,比如 35000 * 2000 = 7200000,只要注意计数器的值和预分频值都必须小于 65535 即可。 当然既然是一秒一次的重复中断,当然中断要是自动装载的。 ? 硬件设计硬件设计 TIMER 定时器为 STM32 处理器内部组件,这部

7、分不需要硬件电路,这里仅在中断产生 时,进行串口打印操作。 ? 软件设计软件设计 神 舟 IV 号 SysTick 系 统 滴 答 实 验 位 于神 舟IV号 开 发 板 光 盘 的源 码 STM32F10x_StdPeriph_Lib_V3.3.0.rar Project12、TIMER定时器(神舟IV号)目录。 进入12、TIMER定时器(神舟IV号) EWARMv5 目录后,双击Project.eww可以打开IAR 工程,以下为工程文件中主要代码的解释与说明。 说明:本实例需要用到使用GPIO管脚控制LED的相关知识和串口相关知识,关于LED 的其它函数请查看“LED跑马灯实验”, 关于

8、串口的函数请查看“串口输入输出实验”, 此处不再介绍。本历程中主要是针对STM32定时器示例中新增添的代码进行说明。 本次为STM32的定时器中断实验, 所以需要配置定时器参数, 使用TIM5_Init函数实现。 前面实验原理章节的“STM32定时器定时时间的计算”部分已经介绍了定时时间的计算方 法,以下TIM5_Init函数为TIM5的参数配置,注释已经很详细了: NVIC_SetPriority函数配置中断优选级等。其中的“NVIC_SetVectorTable”函数告诉处 理器中断向量表存放的起始地址,STM32支持中断向量表起始地址动态设置,这个特性在 SRAM调试和DFU固件升级时很

9、有用, 以为这些情况下中断向量表起始地址已经不是0x0000 处。此处将中断向量表起始地址设置为内部Flash的起始地址0x08000000处。本实例中该函 数不是必须,可以不调用,只是为了大家以后修改程序方便而给出。 以下是main主程序,主要是LED和串口的初始化和定时器的中断配置。如下: 从上面的main函数可以看出, main函数中只是做了LED和串口的初始化和定时器的中断 配置,如果没有中断产生则程序一直处于while死循环中。LED灯的亮灭和串口打印是在定 时器中断服务程序中控制。下面,我们介绍了关于定时器中断程序的实现。 本次定时器中断实验需要在该文件的void TIM5_IRQ

10、Handler(void)中断接口函数中调 用我们的中断处理函数。例如我们可以实现让一个LED指示灯每秒点亮熄灭一次。我们在 “stm32f10x_it.c” 中的SysTick中断接口函数中调用LED_Spark函数控制LED灯闪烁, 并且通 过串口打印提示信息,信息中的数值加1。提心您: 不建议在中断中使用Printf, 此示例只是演示。 为什么使用静态变量counter?目的是每次进入定时器中断函数数静态变量counter保持 上次退出时的值,这样才能达到计数的目的。否则,如果去掉static关键字则每次进入中断 函数时counter为0,串口打印的数值也为0,就达不到每次打印的数值加1

11、的目的。 由于LED_Spark函数是在main.c中实现的,所以我们要在“stm32f10x_it.c”中使用extern 声明一个外部LED_Spark函数,以使该函数在“stm32f10x_it.c”中可以被调用。 下面我们来看一下LED_Spark函数的具体实现: 由上述分析可知每产生一次定时器中断,进入定时器中断服务程序,中断服务程序中, 都调用了LED_Spark函数,而我们配置的是每秒中断一次,那么LED_Spark函数每秒中会被 调用1次,所以我们使用一个静态本地变量TimingDelayLocal来存放该函数被调用的次数。 该函数每一次被调用静态本地变量TimingDelay

12、Local取反,当为0时重新赋值为1,为1时重 新赋值为0。 当静态本地变量TimingDelayLocal为0时熄灭LED指示灯, 为1时点亮LED指示灯, 这样周而复始便可以使LED指示灯每秒闪烁一次。 为什么使用静态变量TimingDelayLocal?目的是每次进入LED_Spark函数数静态变量 TimingDelayLocal保持上次退出时的值,这样才能达到计数的目的。否则,如果去掉static关 键字则每次进入LED_Spark函数时TimingDelayLocal为0,执行else后其值仍为0,指示灯一直 被点亮,就达不到控制指示灯闪烁的目的。 至此神舟系列TIMER定时器中断

13、相关软件程序介绍完毕! ? 下载与验证下载与验证 神舟IV号光盘源码目录包含本实验的工程源码,在神舟IV号光盘源码12、TIMER定时 器.rarProject12、TIMER定 时 器EWARMv5STM32F107VC-ARMJISHUExe 目 录 下 的 ARMJISHU_TIMER定时器.hex文件即为前面我们分析的TIMER定时器实验编译好的固件, 我们可以直接将固件下载到神舟IV号开发板中,观察运行效果。 如果使用JLINK下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。下载固件 到神舟IV号开发板小节进行操作。 如果使用USB下载固

14、件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行操 作。 如果使用串口下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行 操作。 如果在IAR开发环境中, 下载编译好的固件或者在线调试, 请按错误! 未找到引用源。错误! 未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 如果在MDK开发环境中,下载编译好的固件或者在线调试,请按错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 ? 实验现象实验现象 将固件下载在神舟 IV 号 STM32 开发板后,可以看到神舟 IV 号开发板的四个 LED 灯 (LED14)按 1 秒 1 次的频率亮灭。4 个 LED 的具体位置如下图中红色区域所示。 并且串口打印的数值每秒加1: 提心您: 不建议在中断中使用Printf, 此示例只是演示。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1