设为首页 加入收藏

TOP

STM8S timer5初始化设置及应用(一)
2014-11-23 21:37:47 来源: 作者: 【 】 浏览:7
Tags:STM8S timer5 初始 设置 应用
//文件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
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇二叉搜索树 C语言实现 下一篇堆 C语言实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: