六、TIM普通定时器
来源:互联网 发布:东莞网络电视剧 编辑:程序博客网 时间:2024/06/09 16:38
TIM定时器
定时器,其实就是间隔时间执行一个逻辑,STM32有八个TIMX计时器。TIM6和TIM7基本定时定时器,TIM2-TIM5是通用定时器。TIM1、TIM8是高级定时器.配置一个普通定时器步骤如下:
1.配置定时器
2.配置中断
3.在中断函数编写逻辑
4.main函数
5.实验结果
void TIM2_Configuration(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period = 2000; //多少次技术产生一次中断 TIM_TimeBaseStructure.TIM_Prescaler = 36000-1; /*时钟预分频数72M/(36000-1) */ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频*/ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */ TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* 清除溢出中断标志 */ TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启时钟 TIM_Cmd(TIM2, ENABLE); /* 先关闭,等待使用 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , DISABLE); }
2.配置中断
void TIM2_NVIC_Configuration(void){ NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //配置为TIM2的中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);}
3.在中断编写逻辑
void TIM2_IRQHandler(void){ if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) { TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); printf("TIM2_IRQHandler"); LED1(OFF); Delay(0xFFFFF); time++; } }
4.main
#include "stm32f10x.h"#include "led.h"#include "stm32f10x_rcc.h"#include "misc.h"#include "tim.h"#include <stdio.h>#include "usart.h"#include "delay.h"volatile u32 time; // 计时变量int main(){ LED_GPIO_Config(); USART1_Config(); //配置Tim2 TIM2_NVIC_Configuration(); TIM2_Configuration(); START_TIME; printf("main"); while(1){ LED1(ON); Delay(0xFFFFF); }}
5.实验结果
LED闪烁
关于定时器时间的计算:
TIM_Period的值,时机表示执行多少次,产生一次中断
TIM_Prescaler:时钟预分频
时钟频率(一秒钟执行多少次)=72MHz/(TIM_Prescaler+1),说明当前设置的Prescaler,直接决定定时器的时钟频率,就是说一秒钟能计数多少次。
如果计算出来的时钟频率是2000,即一秒钟能计数2000次,而此时如果TIM_Period为4000,即4000次计数后会中断一次,由于时钟频率是一秒钟计数2000次,那么实际上是经过2秒,时钟会中断一次。
在实际程序中,设置TIM_TimeBaseStructure.TIM_Period=7199;内部
TIM_TimeBaseStructure.TIM_Prescaler= 1; 这样得到的就是200us中断一次。
引用:http://blog.csdn.net/ilyfeng1314/article/details/7826263
源代码:http://download.csdn.net/detail/aa375809600/9717144
0 0
- 六、TIM普通定时器
- 将STM32的TIM作为普通定时器的方法
- [定时器TIM]溢出中断
- STM32F103内部定时器TIM
- STM32F103C8开发TIM定时器(三)
- STM32定时器(TIM)概论
- STM32定时器(TIM)之通用定时器
- TIM通用定时器(一)计数器模式
- TIM通用定时器:PWM输入捕获模式
- stm32 TIM定时器[操作寄存器+库函数]
- R3 STM32高级定时器笔记-TIM
- 定时器TIM和PWM的输出
- 普通定时器应用
- tim
- TIM
- Tim
- TIM通用定时器(三):PWM输入捕获模式
- TIM通用定时器(四):PWM模式(PWMOut)
- Android studio Error:(1, 1) 错误: 非法字符: '\ufeff'
- 高并发高负载系统架构-php篇
- 从2级C中了解数据库基础
- 环境传感器
- 分段函数求值
- 六、TIM普通定时器
- android中加载Gif图片
- 微信开发流程
- 数据库备份和还原策略优缺点浅谈
- 高通8937平台手机关机概率卡住问题分析
- iOS编程的几种传值方式
- beyond compare 对class文件反编译及比较
- 摧毁一个学生有多简单?
- svn commit 时提示 Commit failed (details follow) Unable to create pristine install stream 系统找不到指定的路径