STM8S timer5初始化设置及应用(一)

2014-11-23 21:37:47 · 作者: · 浏览: 17
//文件timer5.h

#ifndef _timer5_H_
#define _timer5_H_

#define		TIM5_DIV1				(uint8)0
#define		TIM5_DIV2				(uint8)1
#define		TIM5_DIV4				(uint8)2
#define		TIM5_DIV8				(uint8)3
#define		TIM5_DIV16				(uint8)4
#define		TIM5_DIV32				(uint8)5
#define		TIM5_DIV64				(uint8)6
#define		TIM5_DIV128				(uint8)7


#define	TIM5_UpDate				(unsigned char)0x01	//更新中断通道
#define	TIM5_InChanel1		(unsigned char)0x02
#define	TIM5_InChanel2		(unsigned char)0x04
#define	TIM5_InChanel3		(unsigned char)0x08

#define	TIM5_InDir_UP		(unsigned char)0
#define	TIM5_InDir_DOWN	(unsigned char)1

#define	TIM5_IEN_ENB				TIM5_CR1 |= 0X01 ;	//开启定时器
#define	TIM5_IEN_OFF				TIM5_CR1 &= ~0X01 ;	//关闭定时器	

extern 	void Init_TIM5_Base(uint16 Tcon,uint8 Pscr) ;

extern	void Init_TIM5_InSet(void) ;
extern	void TIM5_InChanelEnb(uint8 Chanel,uint8 en) ;
extern	void TIM5_InDirection(uint8 Chanel,uint8 Dircetion);
extern	void TIM5_InEnb(uint8 en) ;

extern	void TIM5_IntEnb(uint8 Chanel,uint8 en) ;
extern	void TIM5_Enb(uint8 en) ;

#endif


//文件timer5.c

#include "global.h" 
#include "timer5.h"


#define		Init_TIM5_Base_CALL
/*
#define		Init_TIM5_InSet_CALL
#define		TIM5_InDirection_CALL
#define		TIM5_InChanelEnb_CALL
*/
#define		TIM5_IntEnb_CALL
//#define		TIM5_InEnb_	CALL

#define		TIM5_Enb_CALL

// *****   TIM5	16位普通定时器  ********

//*************************************
// 函数名称:Init_Timer5_Timer
// 函数功能:TIM5作定时器用时初始化
// 入口参数:
// 出口参数:无
/***************************************/
#ifdef	Init_TIM5_Base_CALL

void Init_TIM5_Base(uint16 Tcon,uint8 Pscr)
{	
// 禁止产生更新事件
		TIM5_EGR = 0x00;   
//计数器时钟=主时钟/16=16MHZ/16 = 1U
// 相当于计数器周期为1uS
		TIM5_PSCR = Pscr;     												
		
//设定重装载时的寄存器值
		TIM5_ARRH = (Tcon >
> 8) & 0xff;//0X07; TIM5_ARRL = Tcon & 0xff ;//0XD0; // 设定计数器的初值 定时周期=(ARR+1)*8=16320uS TIM5_CNTRH = 0; TIM5_CNTRL = 0; // b0 = 1,允许计数器工作 b1 = 0,允许更新 // 设置控制器,启动定时器 TIM5_CR1 = 0x00; } #endif //Init_TIM5_Base_CALL //************************************* // 函数名称:Init_Timer5_In // 函数功能:TIM5作输入捕捉使用时初始化 // 入口参数: // 出口参数:无 /***************************************/ #ifdef Init_TIM5_InSet_CALL void Init_TIM5_InSet(void) { TIM5_CCER1 &= ~(SETB0 | SETB4) ; //禁止输入捕获1 2 3 TIM5_CCER2 &= ~SETB0 ; // 采样频率=Fmst N = 8 // 每个边沿捕获一次 TIM5_CCMR1 |= 0x30 ; TIM5_CCMR2 |= 0x30 ; TIM5_CCMR3 |= 0x30 ; //通道映射方向 TIM5_CCMR1 |= 0x01 ;//IC1映射在TI1FP1 // TIM5_CCMR1 |= 0x02 ;//IC1映射在TI2FP1 // TIM5_CCMR2 |= 0x01 ;//IC2映射在TI2FP2 TIM5_CCMR2 |= 0X02 ;//IC2映射在TI1FP2 TIM5_CCMR3 = 0x31 ;//IC3映射在TI3FP3 TIM5_SMCR = 0X04 ; //触发方式复位 //捕捉方向 TIM5_InDirection(TIM5_InChanel1,TIM5_InDir_UP) ; TIM5_InDirection(TIM5_InChanel2,TIM5_InDir_DOWN) ; TIM5_InDirection(TIM5_InChanel3,TIM5_InDir_UP) ; //捕捉通道使能 TIM5_InChanelEnb((TIM5_InChanel1 | TIM5_InChanel2) ,ENB) ; TIM5_InChanelEnb(TIM5_InChanel3 ,DIS) ; } #endif //Init_TIM5_InSet_CALL //************************************* // 函数名称:TIM5_InDirection // 函数功能:TIM5捕捉方向设置 // 入口参数:通道号,捕捉方向 // 出口参数:无 /***************************************/ #ifdef TIM5_InDirection_CALL void TIM5_InDirection(uint8 Chanel,uint8 Dircetion) { if(Chanel == TIM5_InChanel1) //通道1 { if(Dircetion