硬件:STM32F103C8T6
平台: ARM-MDk V5.11
前面一篇文章讲过如何利用定时器测量信号的频率(见[STM32F10x] 利用定时器测量频率),使用的是定时器的捕获/比较单元(Capture/compare),它也可以测量输入信号的脉冲宽度。
利用定时器测量脉冲宽度有两种方法。
方法1:
在捕获中断函数里改变捕获信号的触发沿(上升沿触发改为下降沿触发,或者下降沿触发改为上升沿触发),通过两次触发得到的计数器的差值,来计算出脉冲宽度。这种
方法需要定时器的配置和[STM32F10x] 利用定时器测量频率方法是一样的,不同的地方在中断函数里修改触发沿,以TIM2, 捕获通道2为例:
if(CapState == 0)
{
// First time capture
Val1 = TIM_GetCapture2(TIM2);
CapState = 1;
// Change the trigger
TIM2->CCER |= 1UL << 5;
}
else if(CapState == 1)
{
// Second time capture
Val2 = TIM_GetCapture2(TIM2);
// Change the trigger
TIM2->CCER &= ~(1UL << 5);
// Capture computation
if (Val2 > Val1)
{
CapVal = Val2 - Val1;
}
else
{
CapVal = ((0xFFFF - Val1) + Val2);
}
CapState = 0;
}
当然,在第一次捕获的时候将计数器清零,然后第二次捕获直接读取捕获值也是一个不错的选择,如下,
if(CapState == 0)
{
// First time capture
TIM_GetCapture2(TIM2);
CapState = 1;
// Change the trigger
TIM2->CCER |= 1UL << 5;
// Clear CNT
TIM_SetCounter(TIM2, 0);
}
else if(CapState == 1)
{
// Second time capture
CapVal = TIM_GetCapture2(TIM2);
// Change the trigger
TIM2->CCER &= ~(1UL << 5);
CapState = 0;
}
触发沿的配置在CCER这个寄存器里面,这里直接对寄存器进行操作,具体请查阅STM32F10x的参考说明书。
方法2:
利用定时器的PWM输入模式(PWM input mode)。所谓的PWM模式,其实就是利通了定时器捕获单元映射功能,定时器捕获单元1(IC1)和捕获单元2(IC2)可以映射
到同一个捕获通道,一个捕获单元配置成捕获上升沿信号,另一个捕获单元配置成捕获下降沿信号,那么两个捕获值的差就是脉冲宽度的值。还是以TIM2, 捕获通道2
为例,配置代码如下:
1 void CaptureConfig(void)
2 {
3 TIM_ICInitTypeDef TIM_ICInitStructure;
4
5 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI;
6 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
7 TIM_ICInitStructure.TIM_ICFilter = 0x0;
8 TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
9 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
10 TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
11
12 // TIM enable counter
13 TIM_Cmd(TIM2, ENABLE);
14
15 // Enable the CC1, CC2 Interrupt Request
16 TIM_ITConfig(TIM2, TIM_IT_CC2 | TIM_IT_CC1, ENABLE);
17 }
各行代码的意思:
L2:指定捕获单元的映射方式,TIM_ICSelection_IndirectTI 说明捕获单元1(IC1)和捕获单元2(IC2)映射到捕获通道2(TI2,这里是指捕获通道2,区别
定时器TIM2),假如该值为TIM_ICSelection_DirectTI,则捕获单元1(IC1)和捕获单元2(IC2)映射到捕获通道1(TI1)。
L8, L9: 指定捕获单元触发的信号沿(上升沿还是下降沿)。TIM_Channel_1对应捕获单元1(IC1),TIM_Channel_2对应捕获单元2(IC2)注意这里
只需要指定一个捕获单元,另一个捕获单元将会在调用初始化函数TIM_PWMICConfig时设定为相反的边沿。
L16:允许捕获单元1和捕获单元2的中断。
这样,当捕获通道2(TI2)检测到上升沿时,捕获单元1(IC1)将会记录下计数器的值,同时捕获单元1的中断标志位(CC1IF)将置位;
当捕获通道2(TI2)检测到下降沿时,捕获单元2(IC2)将会记录下计数器的值,同时捕获单元2的中断中断标志位(CC2F)将置位。
中断处理函数示例代码如下:
if(TIM_GetITStatus(DEMOD_CAPTURE_TIM, TIM_IT_CC1) == SET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
TIM_GetCapture1(TIM2);
TIM_SetCounter(TIM2, 0);
}
else if(TIM_GetITStatus(DEMOD_CAPTURE_TIM, TIM_IT_CC2) == SET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
CapVal = TIM_GetCapture2(TIM2);
}
总结:
STM32F10x系列的定时器是一个很灵活的东西,想灵活应用它首先要理解它的原理和运作的过程。定时器的捕获单元和捕获通道是比较容易混淆的两个东西
简单来说,STM32F10x的每个通用定时器有4个捕获通道(TI1, TI2, TI3, TI4, 对应4个GPIO口),每个捕获通道对应一个捕获单元,即IC1, IC2, IC3, IC4,
其中捕获单元1和捕获单元2可以映射到同一个捕获通道,TI1或者TI2。
上一篇:STM32F407 PC13-PC15作为GPIO的方法
下一篇:STM32F407系统时钟解析
推荐阅读
史海拾趣
以下是关于DENWIRE公司在电子行业中发展起来的五个相关故事,每个故事都遵循了字数和事实性的要求。
故事一:
DENWIRE公司起初只是一家小型的电线制造商,专注于生产低端音频线缆。然而,随着科技的进步和消费者对于音频质量的追求,公司创始人李先生看到了高品质音频线缆市场的潜力。他带领团队投入大量研发资源,成功开发出了一款具有极低信号损失和出色耐用性的音频线缆,赢得了市场的广泛认可。这款产品不仅让DENWIRE在音频线缆领域崭露头角,也为公司后续的发展奠定了坚实的基础。
故事二:
随着公司规模的扩大,DENWIRE逐渐涉足到了数据传输线缆的生产。在面对激烈市场竞争时,公司坚持创新驱动,注重产品质量。在一次与知名科技公司的合作中,DENWIRE凭借其出色的产品性能和可靠的品质,成功赢得了对方的信任,并签订了长期供货合同。这次合作不仅为DENWIRE带来了可观的收益,也进一步提升了公司在行业内的知名度。
故事三:
在新能源汽车行业蓬勃发展的背景下,DENWIRE敏锐地捕捉到了这一领域的商机。公司迅速调整战略方向,加大了对新能源汽车用线缆的研发和生产投入。经过多次试验和改进,DENWIRE成功开发出了一款符合新能源汽车高标准要求的线缆产品,并在市场上取得了良好的销售业绩。这一成就不仅彰显了DENWIRE的技术实力,也为公司未来的发展开辟了新的道路。
故事四:
面对全球化市场的挑战,DENWIRE积极寻求国际合作与拓展。公司先后与多个国家和地区的知名企业建立了战略合作关系,共同开发新产品、拓展新市场。通过国际合作,DENWIRE不仅学习到了先进的生产技术和管理经验,也进一步提升了自身的品牌影响力和市场竞争力。
故事五:
在环保和可持续发展成为全球共识的背景下,DENWIRE积极响应号召,致力于推动绿色生产和可持续发展。公司投入大量资金引进环保设备和工艺,优化生产流程,减少能源消耗和废弃物排放。同时,DENWIRE还积极参与社会公益活动,回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展注入了新的活力。
作为一家有社会责任感的企业,Blue Creation公司始终关注环保和可持续发展。公司积极采用环保材料和节能技术,努力降低生产过程中的环境影响。同时,公司还积极参与公益事业,捐资助学、扶贫济困,回馈社会。这些举措不仅提升了Blue Creation的企业形象,也为其赢得了社会各界的广泛赞誉。
以上五个故事分别从不同角度展现了Blue Creation公司在电子行业发展的历程和成就。虽然这些故事是虚构的,但它们所蕴含的企业发展理念和经验对于现实中的企业来说仍具有一定的借鉴意义。
随着电子行业的快速发展和市场竞争的加剧,ETC公司面临着巨大的挑战。为了应对行业变革,公司决定进行转型升级。ETC加大了研发投入,积极探索新型晶体管技术,并成功推出了一系列高性能、低功耗的产品。同时,公司还加强了与上下游企业的合作,形成了完整的产业链。这些努力使ETC在激烈的市场竞争中保持了领先地位。
随着公司规模的扩大和业务范围的拓展,BVLED公司开始注重产业链的整合和成本控制。公司通过与上游供应商建立长期稳定的合作关系,确保了原材料的稳定供应和质量保障;同时,公司还加强了对生产过程的监控和管理,通过优化生产流程和降低能耗等方式降低了生产成本。这些措施使得公司在激烈的市场竞争中保持了较强的竞争力。
兆欣深知品质和服务对于企业发展的重要性。他们始终坚持高品质的生产标准,确保每一件产品都符合客户的期望。同时,兆欣还提供了周到的售前咨询和售后服务,为客户提供了全方位的支持。这种以客户为中心的经营理念赢得了客户的广泛赞誉和信任。
随着Arduino平台的不断发展,为了满足不同项目和应用的需求,Arduino推出了多种不同规格和功能的主板。例如,Arduino Diecimila和Arduino Uno等主板的推出,进一步丰富了Arduino的产品线。这些主板各具特色,适用于各种场景,使得Arduino平台在物联网和嵌入式系统的开发中发挥了越来越重要的作用。
2007年全国大学生电子设计竞赛 基本仪器和主要元器件清单【更新08-30】 本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 2007年全国大学生电子设计竞赛 基本仪器和主要元器件清单 1、基本仪器清单 20MHz普通示波器(双通道,外触发输入,有X轴输入,可选带Z轴输入) 60MHz双通道数字示波器 低频信号发生器(1Hz~ ...… 查看全部问答∨ |
|
前言: 洗尘机器人已经问世很多年了,而市场上也已经有多款洗尘机器人出售,价格从1000多人民币,到12000多人民币。当然功能上也有很多不同。最新的清洁机器人已经相当智能化,不但能根据您的需要来定时清洁,还能够在清洁过程中自行充电,然后待 ...… 查看全部问答∨ |
本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 现在很多资料,一些代理商 都倾向于把资料翻译成中文,这样可以更好地宣传推广 但是英语的瓶颈对于我们浏览国外电子类网站,了解国外的电子类行情,是个不小的阻碍 你觉得英语在电子设计中的比重有 ...… 查看全部问答∨ |
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 全彩LED显示屏的最关键部件是LED器件。原因有三:第一,LED是全彩屏整机中使用数量最多的关键器件,每平方米会使用几千至几万只LED;第二,LED是决定整屏光学显示性能的主体,直接影响观众对显 ...… 查看全部问答∨ |
|
在加载LINUX内核的时,要对内核进行交叉编译,这个过程要需要等待很长的时间,移植内核后,如果内核太大,在启动的过程中要需要很长的时间去引导。在学习视频第三讲时,提出了几个可以优化内核的方法,对以后项目开发会比较有用。区域优化,主要包 ...… 查看全部问答∨ |
【菜鸟FPGA学习帖】第4帖 基础实例一 (例程中dout高三位分别为D4 D3 D2)第一章VHDL中有四类操作符,逻辑操作符、关系操作符、算术操作符、符号操作符逻辑操作符AND OR NAND NOR XOR XNOR NOT,如果在一个表达式中有两个以上算符,需要使用括号把 ...… 查看全部问答∨ |