STM32 定时器中断

定时器TIM

定时器TIM

1.分类

	高级定时器:TIM1、TIM8
		有互补输出,用于带死区控制盒紧急刹车、pwm点击控制		
		
	通用定时器:TIM2~TIM5(都位于APB1总线上)
		用于定时计数、pwm输出、输入捕获、输出比较

	基本定时器:TIM6、TIM7
		只有计数功能,主要用于驱动DAC

	stm32f103c8t6 有四个16位定时器,一个高级,三个通用,TIM1-TIM4	

2.计数方式
 
	向上、向下、向上/向下(从0开始)中央对齐

	CNT计数器的计数方向

3.独立通道

	每个定时器(基本除外)都有4个独立通道,可以作为:
		1、输出比较
		2、输入捕获
		3、pwm生成
		4、单脉冲模式输出 

	注:每个通用定时器都是完全独立的,没有共享任何资源


4.产生中断(6种中断触发)

	1、更新(计数器溢出、计数器初始化)
	2、触发事件(计数器启动、停止、初始化)
	3、输入捕获
	4、输出比较

5.时钟来源

	1.内部APB1时钟(通用定时器)
		1)当APB1的时钟为AHB时钟预分频系数为1得到,定时器时钟(CK_INT)等于APB1的时钟,
		2)否则定时器时钟(CK_INT)为APB1的两倍
		默认情况时:
			SYSCLK = 72M
			AHB时钟 = 72M
			APB1时钟 = 	36M
			CK_INT = 2*36M = 72M

	2.外部触发输入(TIMx_ETR)
	3.外部输入脚(TIMx_CH)
	4.其他定时器
(CK_INT内部时钟----PSC预分频器---CK_CNT---CNT计数器+ARR)时基单元
输入捕获
输出比较
6.定时时间的计算

	溢出时间 = (自动装载值ARR+1)*(预分频系数PSC+1)/(CK_INT)
	eg(默认时钟):
		1ms = (999+1)*(71+1)/ 72

7.定时器中断实验
目的:时间间隔为1s, 通过定时器TIM2中断控制灯

	1.打开定时器时钟
		
		RCC_APB1PeriphClockCmd()
			
	2.初始化定时器
	
		TIM_TimeBaseInit()
		typedef struct 
		{ 
			u16 TIM_Period; 		//自动装载值
			u16 TIM_Prescaler; 	//预分频值
			u8 TIM_ClockDivision; 	//用于输入捕获
			u16 TIM_CounterMode; 	//计数方式
		} TIM_TimeBaseInitTypeDef;

	3.开启定时器中断,配置NVIC

	4.使能定时器
		TIM_Cmd()
		
	5.编写中断服务函数
#ifndef __TIM_H
#define __TIM_H

void tim2_init(void);

#endif
#ifndef __LED_H
#define __LED_H

void led_init(

你可能感兴趣的:(STM32,stm32,单片机,嵌入式硬件)