首页 > 其他分享 >STM8 TIM常用配置

STM8 TIM常用配置

时间:2023-05-18 17:24:23浏览次数:45  
标签:TIM2 STM8 TIM1 void 常用 Update TIM Init ENABLE

前言

由于公司项目需要不得不使用STM8单片机,在开发STM8时遇到很多坑,但是经过挑灯夜战,终于把这些问题解决了。

开发环境

  1. 软件环境:IAR for ARM;
  2. 硬件环境:STM32L15X系列。

定时器

TIM1 ETR

代码

/*
****************************************************************************************************
*函数名:TIM1_CH1_ETR_Init()
*功  能:
*参  数:
****************************************************************************************************
*/
void TIM1_CH1_ETR_Init(void)
{
  TIM1_DeInit(); //复位TIME1
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,ENABLE);	
  GPIO_Init(GPIOD,GPIO_Pin_3,GPIO_Mode_In_PU_No_IT);		                         
  TIM1_ETRClockMode2Config(TIM1_ExtTRGPSC_OFF, TIM1_ExtTRGPolarity_Inverted, 0x00);   
  //外部计数配置(TIM1_ExtTRGPSC_DIV2,TIM1_ExtTRGPolarity_Inverted,0);//没有外部触发预分频器,高电平或上升沿有效,使能外部时钟模式1		
  TIM1_SelectInputTrigger(TIM1_TRGSelection_ETRF);
  TIM1_ARRPreloadConfig(ENABLE);
  TIM1_ClearFlag(TIM1_FLAG_Update);
  TIM1_ITConfig(TIM1_IT_Update,ENABLE); 
  TIM1_SetCounter(0);                                
  TIM1_Cmd(ENABLE); 
  enableInterrupts();
 // ITC_SetSoftwarePriority()
}



/*
****************************************************************************************************
*TIMER1_IRQHandler()
*功  能:中断处理 
*参  数: 无
****************************************************************************************************
*/ 
#pragma vector=23+2
__interrupt void TIMER1_IRQHandler(void)
{
//  if(TIM1_GetITStatus(TIM1_IT_Update) != RESET) 
//  {
    TIM1_ClearITPendingBit(TIM1_IT_Update);
    Cnt_a++;
    Cnt_a_View = Cnt_a;
//  }
}


TIM1 通用

/*
****************************************************************************************************
*函数名:TIMER1_Init()
*功  能:定时器1初始化
*参  数:psc:分频数;count:计数值;arr:重装载值
****************************************************************************************************
*/
//TIMER1_Init(1600-1,10000-1,0);//��Ƶ 16M /1600=10KHZ 0.1ms*10000=1s

void TIMER1_Init(u16 psc,u16 count , u16 arr )
{
  TIM1_DeInit();                                          //复位TIME1
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,ENABLE); //开启TIME1的时钟中断
  TIM1_TimeBaseInit(psc,TIM1_CounterMode_Up,count,arr); //psc:分频数;count:计数值;arr:重装载值
  TIM1_ARRPreloadConfig(ENABLE);                        //打开自动重装,打开计数器
  TIM1_ClearFlag(TIM1_FLAG_Update);
  TIM1_ITConfig(TIM1_IT_Update, ENABLE);                //允许定时器1更新中断
  TIM1_Cmd(ENABLE);                                     //使能定时器1
}


/*
****************************************************************************************************
*TIMER1_IRQHandler()
*功  能:中断处理 
*参  数: 无
****************************************************************************************************
*/ 
#pragma vector=23+2
__interrupt void TIMER1_IRQHandler(void)
{
  if(TIM1_GetITStatus(TIM1_IT_Update) != RESET) 
  	TIM1_ClearITPendingBit(TIM1_IT_Update);
}

TIM2 通用

/*
****************************************************************************************************
*函数名:TIMER2_Init()
*功  能:定时器2初始化  
*参  数:psc:分频数;count:计数值;arr:重装载值
****************************************************************************************************
*/
//TIMER2_Init(10000);   //10ms

void TIMER2_Init(u16 arr)
{
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE); 
  TIM2_DeInit();                                          //复位TIME2  
  TIM2_TimeBaseInit(TIM2_Prescaler_16, TIM2_CounterMode_Up,arr);
  TIM2_ARRPreloadConfig(ENABLE);                        //打开自动重装,打开计数器
//  TIM2_ClearFlag(TIM2_FLAG_Update);
  TIM2_ITConfig(TIM2_IT_Update, ENABLE);                //允许定时器2更新中断
  TIM2_Cmd(ENABLE);  
  enableInterrupts();
}


/***********************************************************
*@fuction	:TIMER2_IRQHandler
*@brief		:定时器2中断  10ms
*@param		:--
*@return	:--
*@author	:LCH
*@date		:2023-3-21
***********************************************************/
#pragma vector=19+2
__interrupt void TIMER2_IRQHandler(void)
{
  TIM2_ClearITPendingBit(TIM2_IT_Update);
  // if(TIM2_GetITStatus(TIM2_IT_Update)== SET) //溢出中断
  //  {
  //   TIM2_ClearITPendingBit(TIM2_IT_Update);
  if(TIM2_Count++ >= 100)
  {
    TIM2_Count = 0;
    flag_1s=1;
    User_PAR.Timer_1s_flag = Valid;
    User_PAR.Timer_1s_Filter_flag = Valid;
    Cnt_c = TIM1_GetCounter();
    View_Val = Cnt_a * 65536 + TIM1_GetCounter();
    Frequency_b = Cnt_a * 65536 + TIM1_GetCounter();
    TIM1_SetCounter(0);   
  }else;                
  //  }else;
}

TIM2 ETR

/*
****************************************************************************************************
*函数名:TIM2_CH1_ETR_Init()
*功  能:定时器1初始化	
*参  数:psc:分频数;arr:重装载值
****************************************************************************************************
*/
void TIM2_CH1_ETR_Init(void)
{
	uint8_t ICFilter = 0;
	GPIO_Init(GPIOB,GPIO_Pin_3,GPIO_Mode_In_PU_No_IT);		
	TIM2_DeInit();    //复位TIME2
	CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE); //开启TIME2的时钟中断		
	TIM2_ETRClockMode2Config(TIM2_ExtTRGPSC_OFF,TIM2_ExtTRGPolarity_Inverted,0);//没有外部触发预分频器,高电平或上升沿有效,使能外部时钟模式2		
	TIM2_SelectInputTrigger(TIM2_TRGSelection_ETRF); //选择外部触发
	TIM2_ARRPreloadConfig(ENABLE);		
	TIM2_ClearFlag(TIM2_FLAG_Update);
	TIM2_ITConfig(TIM2_IT_Update,ENABLE);   //打开中断
	TIM2_SetCounter(0);
	TIM2_Cmd(ENABLE);
}



/***********************************************************
*@fuction	:TIMER2_IRQHandler
*@brief		:定时器2中断  10ms
*@param		:--
*@return	:--
*@author	:LCH
*@date		:2023-3-21
***********************************************************/
#pragma vector=19+2
__interrupt void TIMER2_IRQHandler(void)
{
  TIM2_ClearITPendingBit(TIM2_IT_Update);
}

标签:TIM2,STM8,TIM1,void,常用,Update,TIM,Init,ENABLE
From: https://www.cnblogs.com/buglee/p/17412548.html

相关文章

  • 使用 JMeter 完成常用的压力测试
    IBM写道  讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有其它的非功能因素也起着决定性的因素,例如软件的响应速度。影响软件响应速度的因素有很多,有些是因为算法不够高效;还有些可能受用户......
  • [SEO知识讲解] 老手忽悠新手seo常用的话
    本文转载自:[SEO知识讲解]老手忽悠新手seo常用的话更多内容请访问钻芒博客:https://www.zuanmang.net无论哪个seo高手都有一个接触seo从生到熟的过程。不管是高手带,还是集百家之长,亦或者是大量的实战,皆是如此。不被忽悠的新人不会成为老手,没有经历挫折的过程注定不会对搜索引擎优......
  • 常用命令行
    netshwinsockresetdockerpullintel/intel-extension-for-pytorch:gpudockerrun-it--device/dev/dri-vL::/data-p7860:7860intel/intel-extension-for-pytorch:gpudockerrun-it--privileged-vL::/data-p7860:7860intel/intel-extension-for-pytorch:gp......
  • TimescaleDB VS TDengine:写入性能和查询性能是 TDengine 的 1/6、1/28
    基于第三方基准性能测试平台TSBS(TimeSeriesBenchmarkSuite)标准数据集,TDengine团队分别就TSBS指定的DevOps中cpu-only五个场景,对时序数据库(TimeSeriesDatabase,TSDB)TimescaleDB和TDengine进行了对比测试。本文将会从写入、存储、查询及资源开销等几大维度为大家汇......
  • 常用的表格检测识别方法-表格区域检测方法(上)
    ​ 常用的表格检测识别方法 表格检测识别一般分为三个子任务:表格区域检测、表格结构识别和表格内容识别。本章将围绕这三个表格识别子任务,从传统方法、深度学习方法等方面,综述该领域国内国外的发展历史和最新进展,并提供几个先进的模型方法。 3.1表格区域检测方法 表......
  • 基于算法通信过程中的常用协议介绍
    基于算法通信过程中的常用协议介绍1、HTTP(HypertextTransferProtocol):HTTP是一种应用层协议,用于客户端和服务器之间的通信。它基于请求-响应模型,通过发送HTTP请求和接收HTTP响应来进行通信。HTTP协议常用于Web应用中,可以用于传输算法请求和响应数据。2、REST(Representation......
  • 智慧档案馆常用的一款空气质量检测传感器
    档案馆库房专用的一款智能型空气质量云测仪空气质量检测仪空气质量传感器环境集成传感器集成/温湿度、粉尘PM2.5PM10/甲醛/TVOC/CO2等高度集成的一款传感器/RS485信号输出◆温度测量参数:(1)温度测量范围:-40~80℃(2)输出分辨率:0.1oC(3)测量精度:<土0.5C;(4)工作温度范围:......
  • 水晶报表 加载报错 An error has occurred while attempting to load the Crystal Rep
    源错误:CrystalReportsAnerrorhasoccurredwhileattemptingtoloadtheCrystalReportsruntime.EithertheCrystalReportsregistrykeypermissionsareinsufficientortheCrystalReportsruntimeisnotinstalledcorrectly.Pleaseinstalltheappropriate......
  • idea 常用设置
    1.汉化 2.两文件夹在同一行 ......
  • 微信生成常用接口地址枚举类
    /***@description:微信接口地址枚举*@author:Mr.Fang*@create:2023-05-18**/publicenumWxEnum{BASIC_URL("小程序与公众号","https://api.weixin.qq.com",""),MCH_BASIC_URL("微信商户","https://api.mch.weixin......