历史上的今天
今天是:2025年02月09日(星期日)
2020年02月09日 | STM8SF903K3T6定时器1输入捕获
2020-02-09 来源:eefocus
简介
最近接了个转速仪的项目,原理是计频率。最开始是用外部中断,然后根据定时器定时一秒来取值,转速是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) 向上计数 最大计数值65535
TIM1_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); //计数器清0
loop = 1;
break;
case 1: //下一个信号
TIM1CH1_CAPTURE_VAL = TIM1_GetCapture1(); //读取计数值
TIM1_SetCounter(0); //计数器清0
TIM1CH1_CAPTURE_SUCCEED = 1; //捕获成功
temp=TIM1CH1_CAPTURE_STA&0xff; //读取数据
temp*=65536; //溢出时间总和
temp+=TIM1CH1_CAPTURE_VAL; //加上计数器时间
TIM1CH1_CAPTURE_STA=0; //溢出计数清0
break;
default :
loop = 0;
break;
}
}
TIM1_ClearITPendingBit( TIM1_IT_CC1 ); //清除更新中断标志位
TIM1_ClearFlag( TIM1_FLAG_CC1 ); //清除输入捕获标志位
}
史海拾趣
|
问: ASIC的中文翻译是专用集成电路,为什么说它是一种嵌入式微处理器呢?FPGA也是一种嵌入式微处理器吗?我听有人说FPGA指的是一种封装结构,这是正确的吗? 答: 用于专用应用场合的处理器就是嵌入式处理器,不管它是可编程的还是不可编程的。 ...… 查看全部问答> |
|
瑞士LEM互感器、LEM电流互感器、LEM电涌保护器、LEM传感器、LEM电压互感器、LEM电量传感器、LEM无线电能表 LEM 是全球电量传感器的知名制造者,也是电量传感器领域的领导者。 LEM集团全球拥有多家公司,销售办事处遍布全球。其中瑞士日内瓦、中 ...… 查看全部问答> |
|
1 概述 WK283R3S-33M电源模块为非密封灌封系列,其主要技术参数:VOUT=3.3 V,VIN=18 V~36 V,POUT=33 W,SI/Sv=0.5%,η=85%,VP-P=100 mV。该电源模块的外形为1/4砖,其主要特点为低压大电流输出模块、高效率和低纹波电压值、体积为1/4砖可 ...… 查看全部问答> |
|
RealView MDK-ARM Version:3.24 CPU是LPC2101 H-JTAG 0.8 软件仿真正常。 现象是仿真器连接都正常。 硬件仿真 在Startup.s中还正常,转向main()函数就死机。 查了好多天了。今天忽然注意到软件仿真的程序地址0x000041A4(比16K还多) 而LPC2 ...… 查看全部问答> |
|
[招聘]七万美金年薪起,美国某著名通信/网络优化服务供应商招聘赴美员工 [招聘职位一:Telecom –OSS Engineer (Nokia OSS/ Netact Engineer) 工作地点:美国 工作类型:全职 签证种类:工作签证 工作待遇:$70,000/年(能力突出者可以面议); 每周工时:40小时/周 申请要求: 1. 本科以上学历; 2. 七年( ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 在78**、79**系列三端稳压器中最常应用的是TO-220和TO-202两种封装。这两种封装的图形以及引脚序号、引脚功能如附图所示。 图中的引脚号标注方法是按照引脚电位从高到底的顺序标注的。这样 ...… 查看全部问答> |
|
S3C2440平台WinCE5.0中串口发送堵塞现象的疑惑: 本人开发一个软件,使用TQ公司的SKY2440开发板为模板,使用的是从4.2移植到wince5.0使用的BSP包。 该软件需要用到2个串口(COM0和COM1),TCP/UDP编程;修改MDD层的mdd ...… 查看全部问答> |
|
大家好,我请教一个关于2440的问题。我用2440连接一个ITU656接口时序的摄相头,为什么一直接不到同步信号?模块出来的同步开始是(FF,00,00,80),结束是(FF,00,00,90)。2440的ForthWord中的F,V,H是不是同步信号线上的电平?… 查看全部问答> |




