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_CALLvoid 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_CALLvoid 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_CALLvoid TIM5_InDirection(uint8 Chanel,uint8 Dircetion){ if(Chanel == TIM5_InChanel1) //通道1 { if(Dircetion == TIM5_InDir_UP) TIM5_CCER1 &= ~SETB1 ;//捕捉在TI1F或TI2F的上升沿 else TIM5_CCER1 |= SETB1 ; } else if(Chanel == TIM5_InChanel2)//通道2 { //捕捉在TI1F或TI2F的上升沿 if(Dircetion == TIM5_InDir_UP) TIM5_CCER1 &= ~SETB5 ; else TIM5_CCER1 |= SETB5 ; } else if(Chanel == TIM5_InChanel3)//通道3 { if(Dircetion == TIM5_InDir_UP) TIM5_CCER2 &= ~SETB1 ;//捕捉在TI3F的上升沿 else TIM5_CCER2 |= SETB1 ; }}#endif //TIM5_InDirection_CALL//*************************************// 函数名称:TIM5_InChanelEnb// 函数功能:TIM5输入通道使能函数// 入口参数:TIM5通道号 使能参数// 出口参数:无/***************************************/#ifdef TIM5_InChanelEnb_CALLvoid TIM5_InChanelEnb(uint8 Chanel,uint8 en){ if(ENB == en) { if(Chanel & TIM5_InChanel1) TIM5_CCER1 |= SETB0 ; //捕捉1使能 if(Chanel & TIM5_InChanel2) TIM5_CCER1 |= SETB4 ; //捕捉2使能 if(Chanel & TIM5_InChanel3) TIM5_CCER2 |= SETB0 ; //捕捉3使能 } else { if(Chanel & TIM5_InChanel1) TIM5_CCER1 &= ~SETB0 ; //捕捉1禁止使能 if(Chanel & TIM5_InChanel2) TIM5_CCER1 &= ~SETB4 ; //捕捉2禁止使能 if(Chanel & TIM5_InChanel3) TIM5_CCER2 &= ~SETB0 ; //捕捉3禁止使能 } }#endif //TIM5_InChanelEnb_CALL//*************************************// 函数名称:TIM5_IntEnb// 函数功能:TIM5中断使能函数// 入口参数:TIM5中断号 使能参数// 出口参数:无/***************************************/#ifdef TIM5_IntEnb_CALL void TIM5_IntEnb(uint8 Chanel,uint8 en){ if(ENB == en) { if(Chanel & TIM5_UpDate) TIM5_IER |= SETB0 ; //允许更新中断 if(Chanel & TIM5_InChanel1) TIM5_IER |= SETB1 ; //开捕捉/比较1中断 if(Chanel & TIM5_InChanel2) TIM5_IER |= SETB2 ; //开捕捉/比较2中断 if(Chanel & TIM5_InChanel3) TIM5_IER |= SETB3 ; //开捕捉/比较3中断 } else { if(Chanel & TIM5_UpDate) TIM5_IER &= ~SETB0 ; //禁止更新中断 if(Chanel & TIM5_InChanel1) TIM5_IER &= ~SETB1 ; //禁止捕捉/比较1中断 if(Chanel & TIM5_InChanel2) TIM5_IER &= ~SETB2 ; //禁止捕捉/比较2中断 if(Chanel & TIM5_InChanel3) TIM5_IER &= ~SETB3 ; //禁止捕捉/比较3中断 } }#endif //TIM5_IntEnb_CALL //*************************************// 函数名称:Tim5In_Enb// 函数功能:TIM5 开捕捉中断 // 入口参数:// 出口参数:无/***************************************/#ifdef TIM5_InEnb_CALLvoid TIM5_InEnb(uint8 en){ if(en == ENB) { TIM5_CNTRH = 0; TIM5_CNTRL = 0; //开捕捉/比较1.2中断 TIM5_IntEnb((TIM5_InChanel1 | TIM5_InChanel2),ENB) ; TIM5_CR1 |= 0X01 ; //开启定时器 } else { //关闭捕捉/比较1.2.3中断 TIM5_IntEnb((TIM5_InChanel1 | TIM5_InChanel2 | TIM5_InChanel3),DIS) ; TIM5_CR1 &= ~0X01 ; //关闭定时器 }}#endif //TIM5_InEnb_CALL//*************************************// 函数名称:Tim5er_Enb// 函数功能:TIM5er使能 作定时器用// 入口参数:// 出口参数:无/***************************************/#ifdef TIM5_Enb_CALLvoid TIM5_Enb(uint8 en){ if(en == ENB) { TIM5_IntEnb(TIM5_UpDate,ENB) ; //使能更新中断 TIM5_CR1 |= 0X01 ; //开启定时器 } else { TIM5_IntEnb(TIM5_UpDate,DIS) ; //禁止更新中断 TIM5_CR1 &= ~0X01 ; //关闭定时器 }}#endif //TIM5_Enb_CALL//实例应用void main(void){//-----TIM5 初始化-------------------------- Init_TIM5_Base(30,TIM5_DIV16) ; //16M/16=1M 定时30*1U=30U中断一次 TIM5_Enb(ENB) ; //TIM5定时器使能计数 使能中断 while(1) { }}
>更多相关文章
- 09-29如何通过wrap malloc定位C/C++程序的内存泄漏
- 02-25打车软件大战升级,补贴还能维持多久?
- 12-23BMP文件右旋90度[c语言]
- 12-23寻找直方图中面积最大的矩形(C语言版)
- 12-23[ndk,2]ndk开发案例和错误处理
- 12-23[ndk,1]ndk开发,C语言入门讲解
- 12-23C语言连续存储实现队列机制
- 12-23Objective-c 数据类型
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御