STM8SF903K3T6定时器1输入捕获

news/2024/10/24 4:38:03/

STM8SF903K3T6定时器1输入捕获

简介

最近接了个转速仪的项目,原理是计频率。最开始是用外部中断,然后根据定时器定时一秒来取值,转速是rpm,所以还要乘以60.
因为需要反映快所以后来改用定时捕捉。采用TIM1的通道一PC1来捕捉。

代码流程

1.开启系统时钟(可以选择内部或者外部)

void CLK_Configuration(void)
{CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (1分频)
}

2.开启定时器设置,开启溢出中断,是因为在捕获两个信号时,时间大于定时器最大计数时间,算出溢出时间。

void TIM1_CAP_Configuration(void)
{TIM1_DeInit();//分频系数(15+1)   向上计数    最大计数值65535TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, 65535, 0);//捕获通道1   下降沿    选择TI1    不滤波TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI,TIM1_ICPSC_DIV1, 0x00);//使能输入捕获通道一中断请求,更新中断TIM1_ITConfig( TIM1_IT_CC1, ENABLE);TIM1_ITConfig( TIM1_IT_UPDATE, ENABLE);   //加入更新中断是因为要加入溢出计数。//清除输入捕获通道一中断标志位。更新中断标志位。TIM1_ClearFlag(TIM1_FLAG_CC1);TIM1_ClearFlag(TIM1_FLAG_UPDATE);//开启定时器TIM1_Cmd(ENABLE);
}

3.中断函数设置。

//更新中断
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{if(TIM1_GetFlagStatus(TIM1_FLAG_UPDATE) != RESET && Start_Count_Flag){if(TIM1CH1_CAPTURE_STA==0xff)         //计数溢出{loop = 0;                         //重新捕获TIM1CH1_CAPTURE_STA = 0;          //状态清0}else{TIM1CH1_CAPTURE_STA++;}}TIM1_ClearITPendingBit( TIM1_IT_UPDATE );  //清除溢出中断标志位TIM1_ClearFlag( TIM1_FLAG_UPDATE );    //清除溢出标志位
}
//输入捕获中断
INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{//TIM1_FLAG_CC1通道一捕捉信号通道位。if(TIM1_GetFlagStatus(TIM1_FLAG_CC1) != RESET && Start_Count_Flag){//为了能检测每一个波形的周期,加入了以下检测方法。switch(loop){case  0:               //开启捕获后第一个信号TIM1_SetCounter(0);    //计数器清0loop = 1;break;case 1:                //下一个信号TIM1CH1_CAPTURE_VAL =  TIM1_GetCapture1();    //读取计数值TIM1_SetCounter(0);             //计数器清0TIM1CH1_CAPTURE_SUCCEED = 1;      //捕获成功temp=TIM1CH1_CAPTURE_STA&0xff;    //读取数据temp*=65536;                     //溢出时间总和 temp+=TIM1CH1_CAPTURE_VAL;       //加上计数器时间TIM1CH1_CAPTURE_STA=0;          //溢出计数清0break;default :loop = 0;break;}}TIM1_ClearITPendingBit( TIM1_IT_CC1 );  //清除更新中断标志位TIM1_ClearFlag( TIM1_FLAG_CC1 );    //清除输入捕获标志位
}

http://www.ppmy.cn/news/118886.html

相关文章

STM8S903K3T6C基于ST Visual Develop开发输入输出按键检测示例

STM8S903K3T6C基于ST Visual Develop开发输入输出按键检测示例 使用IAR开发stm8调用标准库,有时候非常卡顿,虽然开发起来方便,但是体验感很差。 开发环境 ST Visual Develop Cosmic CxSTM8 32K 4.3.4插件配合基于C语言开发。 ST Visual Dev…

一场变革来到零售业,盖雅「劳动力账户」助力连锁门店全面管理人效

‍ 上半年,逐渐回暖的出游,为文旅和线下零售业的营收创造了希望, 但面对高周转率和低利润率的行业竞争格局,比起令人兴奋的营收,大部分零售企业仍在焦虑营收背后的成本。 或许是过去三年的环境让更多企业学会了「精…

STM8S903K3T6C基于ST Visual Develop开发串口数据收发示例

STM8S903K3T6C基于ST Visual Develop开发串口数据收发示例 相关篇《STM8S903K3T6C基于IAR寄存器开发串口通讯示例》📺环境配置和工程创建到编译和测试全过程演示: 利用ST Visual Develop配置环境和工程,利用ST Visual Programmer工具来烧录程…

viper4android fx 降底噪,ViPer4android. FX顶级音效!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 名称:OPPO X903 杜比音效脉冲反馈样本 For VIPER4Android FX v2.0 样本数量:72 适配V4A版本:ViPER4Android FX v2.2.0.1 或更高 适用范围:耳机内放 制作者:漫游因特网 授…

HBuilder X 配置sass/scss

HBuilder X 配置sass/scss 在工具栏上,找到工具–》插件安装–》插件市场–》搜索sass,步骤如下图所示: 这两种方法选择一种安装插件即可,安装完记得重启hBuilderX软件 接下来在工具–》插件配置–》选择sass插件的–》package…

Codeforces903C

题目链接:http://codeforces.com/contest/903/problem/D 题意&#xff1a;给了一个二元关系为 f(x,y){y−x,0,|x−y| > 1|x−y| < 1 f(x, y) = \begin {cases}y-x, & \text{$|x-y|$ > 1} \\0, & \text{$|x-y|$ 给出N个整数(1 < N < 200000), 1 …

关于Ubuntu 下新开发板adb 无法识别的问题(成功案例:解决了三星,索爱,OPPO X903案例)

问题&#xff1a; 在ubuntu中eclipse中用真机来调试androi程序时&#xff0c;发现无法识别手机&#xff0c;如下图显示2.37一栏之前显示全是乱码&#xff0c;这是解决后截的图。 问题原因是&#xff1a; 在window下我们可以通过安装驱动来实现abd的连接&#xff0c;而在ubun…

OPPO X903 刷机包

给同事刷的一款OPPO手机&#xff0c;X903&#xff0c; 这个相对来说比较容易&#xff0c;不用root, 不用第三方recovery。 直接把刷机包存进去就可以直接刷机了。刷机步骤网上都有&#xff0c;这里只贡献亲测有效刷机包&#xff0c;需要的来吧&#xff01; OPPO X903 刷机包 …