历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2019年01月30日 | STM32定时器5的输入捕获实验

2019-01-30 来源:eefocus

此处使用的普中开发板,实验内容定时器5输入捕获通道1的高电平时长。


软件实现方法:


定时器5主要使用了两个功能:


①时基单元;②输入捕获;


从下文可知,通过定时器5捕获到相应的极性(eg:上升沿或高电平and so on)后,保存计数器的当前值到捕获/比较寄存器(TIMx_CCRx)中。而后,通过第二次捕获成功后,通过差值就可以求出该极性的周期或保持时间。此实验室捕获高电平的时间,通过先捕获上升沿再捕获下降沿,即可求出一个高电平的时长。

数据手册描述如下:


在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存

器(TIMx_CCRx)中。当发生捕获事件时,相应的CCxIF标志(TIMx_SR寄存器)被置1,如果开放

了中断或者DMA操作,则将产生中断或者DMA请求。如果发生捕获事件时CCxIF标志已经为

高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置1。写CCxIF=0可清除CCxIF,或读取存储

在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。 

以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中,步骤如下: 

● 选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的

CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TIMx_CCR1寄存器变为只读。 

●  根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是

TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动,

我们须配置滤波器的带宽长于5个时钟周期;因此我们可以(以fDTS频率)连续采样8次,以确

认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。 

● 选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。 

● 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预

分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。 

● 设置TIMx_CCER寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中(使能输入捕获)。 

● 如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置

TIMx_DIER寄存器中的CC1DE位允许DMA请求。 

当发生一个输入捕获时: 

● 产生有效的电平转换时,计数器的值被传送到TIMx_CCR1寄存器。 

●  CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除,

CC1OF也被置1。 




● 如设置了CC1IE位,则会产生一个中断。 

● 如设置了CC1DE位,则还会产生一个DMA请求。 

为了处理捕获溢出,建议在读出捕获溢出标志之前读取数据,这是为了避免丢失在读出捕获溢

出标志之后和读取数据之前可能产生的捕获溢出信息。




使用库函数可以简化许多步骤,毕竟是别人包装好的函数来着。


TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明一个结构体变量,用来初始化定时器

TIM_ICInitTypeDef TIM5_ICInitStructure;

 

NVIC_InitTypeDef NVIC_InitStructure;

 

/* 开启定时器5时钟 */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); //使能TIM5时钟

 

TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1); //清除中断和捕获标志位

 

TIM_TimeBaseInitStructure.TIM_Period = 0xffff; //设定计数器自动重装值

TIM_TimeBaseInitStructure.TIM_Prescaler = 71;   //以1Mhz的频率计数 一次即是1us

TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;   //设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1映射到TI1上 

TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获 

TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上 

TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频 

TIM5_ICInitStructure.TIM_ICFilter = 0x00; //IC1F=0000 配置输入滤波器 不滤波 

TIM_ICInit(TIM5, &TIM5_ICInitStructure); //初始化TIM5输入捕获通道1

//中断分组初始化

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn; //打开TIM5的全局中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级为0

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //响应优先级为1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //使能

NVIC_Init(&NVIC_InitStructure);

TIM_Cmd(TIM5,ENABLE); //使能或者失能TIMx外设

TIM_ITConfig(TIM5, TIM_IT_Update|TIM_IT_CC1, ENABLE ); //使能或者失能指定的TIM中断


中断处理函数

void TIM5_IRQHandler()   //定时器5输入捕获中断函数

{

if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获

{

if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)

{

if(TIM5CH1_CAPTURE_STA&0X40) //已经捕获到高电平了

{

if((TIM5CH1_CAPTURE_STA&0x3f)==0x3f)//高电平太长了

{

TIM5CH1_CAPTURE_STA|=0x80; //标记成功捕获了一次

TIM5CH1_CAPTURE_VAL=0xffff;

}

else

{

TIM5CH1_CAPTURE_STA++;

}

}

}

}

if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET) //捕获1发生捕获事件

{

if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿

{

TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次上升沿 

TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5); //获得TIMx输入捕获1的值

TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //设置为上升沿捕获

}

else

{

TIM5CH1_CAPTURE_STA=0; //清空 

TIM5CH1_CAPTURE_VAL=0; 

TIM_SetCounter(TIM5,0); 

TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿 

TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //设置为下降沿捕获

}

}

TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位

}


库函数的处理方式,是将手册上说到条件逐一封装到TIM_ICInitTypeDef 结构体中,再通过TIM_ICInit()函数将相应的值填写到寄存器中即可。


推荐阅读

史海拾趣

方向电子公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的关键设备,具有高度的专业性和广泛的应用性。从广义上讲,凡是能与电视机连接并处理音视频信号的网络终端设备均可视为机顶盒。它不仅能够接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,还能通过内置的解码器将这些信号转换为电视机可识别的格式,从而呈现出高清乃至4K的超高清画质,大大提升了观看体验。

机顶盒不仅限于基本的电视信号接收功能,还集成了多种增值服务。例如,它提供电子节目指南,让用户轻松查找和预约节目;支持因特网网页浏览,实现网络购物、在线视频观看、游戏娱乐等多元化互动体验。随着智能化技术的发展,现代机顶盒还融入了语音助手、智能推荐等功能,进一步提升了用户的操作便捷性和内容个性化程度。

在技术层面,机顶盒的发展日新月异,不断向高清化、智能化方向迈进。5G技术的应用更是为机顶盒带来了更快的传输速度和更低的延迟,为用户提供了更为流畅的观影体验。此外,虚拟现实和增强现实技术的融入,也为机顶盒的未来发展打开了新的想象空间,将为用户带来更为沉浸式和互动式的观影享受。

综上所述,机顶盒作为现代家庭娱乐的重要组成部分,不仅极大地丰富了人们的电视观看体验,还通过不断的技术创新和服务升级,满足着用户日益多样化的需求。

EPIGAP公司的发展小趣事

EPIGAP公司的创始人李先生在半导体领域拥有深厚的技术背景。在公司初创时期,他带领研发团队成功研发出一种新型的高性能芯片,该芯片在功耗和性能上均达到了行业领先水平。这一技术突破使得EPIGAP公司在激烈的市场竞争中脱颖而出,迅速获得了众多客户的青睐。凭借这一产品,EPIGAP成功打开了市场,为后续的发展奠定了坚实的基础。

ETERNA公司的发展小趣事

2014年,ETERNA成为了ATP世界网球巡回赛瑞士公开赛的指定合作伙伴。这一合作标志着ETERNA在品牌建设和市场推广方面取得了新的突破。通过与ATP的合作,ETERNA不仅成功地将品牌与高端体育赛事相结合,还进一步提升了品牌形象和知名度。同时,ETERNA还为赛事提供了精准的计时服务,展现了其在电子技术领域的实力。

C&H Technology公司的发展小趣事

随着公司的不断发展壮大,C&H Technology开始关注可持续发展问题。公司加大了对环保技术的研发投入,推出了多款环保型芯片产品,降低了生产过程中的能耗和排放。同时,公司还积极参与社会公益事业,通过捐款、设立奖学金等方式回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。


以上便是关于C&H Technology公司发展起来的相关故事。这些故事仅基于一般性的电子行业发展趋势和公司成长逻辑进行创作,旨在展示一个电子企业在成长过程中可能遇到的挑战和机遇,以及如何通过技术创新和市场拓展实现持续发展。

Conxall公司的发展小趣事

在国内市场取得一定成绩后,Conxall公司开始将目光投向海外市场。公司积极参加国际电子展,与海外客户建立联系,拓展销售渠道。同时,公司还针对不同国家和地区的市场需求,推出定制化产品,赢得了海外客户的青睐。

益升华(Essentra)公司的发展小趣事

益升华(Essentra)公司深知客户是企业发展的基石。因此,公司始终将客户服务放在首位,致力于为客户提供优质的产品和服务。公司建立了完善的客户服务体系,为客户提供从产品咨询、选购、安装到售后维护的全流程服务。同时,公司还积极开展客户回访和满意度调查活动,及时了解客户需求和反馈意见,不断改进产品和服务质量。这些努力使益升华(Essentra)公司赢得了客户的广泛赞誉和信任。

问答坊 | AI 解惑

{求助}EVC下如何刷新整个屏幕!

想刷新设备的整个屏幕,使用函数InvalidateRect,第一个参数需要指定所刷窗体的句柄,但是屏幕窗体不定,或者有好几层且大小不一无法使用GetWindow() 查找, 如果向窗体发WM_PAINT的广播消息的话,不用指定句柄,但是只有自己的窗体得到刷新;了别 ...…

查看全部问答>

求红外线软件功能类似“学习型遥控器”

请问哪里有这样的软件 类似“学习型遥控器”的功能 接受红外线遥控器案件功能后 保存起来 需要的时候再通过电脑控制红外线适配器 发射出同样的遥控指令 多谢 …

查看全部问答>

急求C8051F系列单片机可用的PID控制C语言程序

急求C8051F系列单片机可用的PID控制C语言程序  哪位哥哥能帮下阿  感激不尽~…

查看全部问答>

关于Cortex-M3工作模式的问题

在ARM7TDMI中有用户,系统...7种工作模式.而看到一网上资料说,Cortex-M3处理器只有2种工作模式:线程模式 和 处理器模式.能否指点一下,这两种模式的具体情况(eg:如何工作),和ARM7TDMI中的7种工作模式有无联系或相似之处.…

查看全部问答>

求一个NE5532调音电路

各位大侠,求一个NE5532调音电路,要求能够实现高,中,低音调节,感激不尽!…

查看全部问答>

【TI原创】基于LM3S8962的网络收音机(二) --- 相关资源

    作者: chenzhufly  QQ:36886052   这是网上的一个webradio的开源项目,基于LM3S6950,搞的相当的不错,我也是跟着学习学习. http://code.google.com/p/arm-webradio/   效果图:   系统框图: ...…

查看全部问答>

各位 有200倍的分频芯片吗 跪谢~~~

各位前辈,我现在跟老师做一个项目,想要把200M的信号分频为1M的信号,在网上搜了很久,也没搜到合适的分频芯片,不知道有木有200倍的分频芯片,现成的倒是有10倍和20倍的分频,不知道把它们两个串联起来用的效果怎么样,晚辈是新手,还望各位前辈 ...…

查看全部问答>

关于MSP430F149的触摸按键的程序,求高手帮忙看看

#include<msp430x14x.h>#define Pad1_OUT_L P1DIR|=BIT3;P1OUT&=~BIT3      //将Pad1置为低电平的宏定义#define Pad1_DIR_IN P1DIR&=~BIT3           &n ...…

查看全部问答>

有没有人会用OV7670的啊?

本帖最后由 paulhyde 于 2014-9-15 04:04 编辑 由于今年TI杯出现了摄像头我们买了OV7670模块,请问各位大虾有没有这方面懂的啊?给点指导啊!!!  …

查看全部问答>

本人外行,大家帮我分析下几个连线图和符号吧,只要大概意思

不好意思啊,这么简单的问题还来麻烦大家,本人毕业多年了,已经忘得差不多了,最近再阅读有关资料遇到了问题,我对不起我的大学老师。大家帮我理解理解 问题: 一:帮我分析下图一代表个啥意思啊(Internal Cables)?看不懂那个P1 J1那里是什么 ...…

查看全部问答>