历史上的今天
返回首页

历史上的今天

今天是:2025年08月21日(星期四)

正在发生

2019年08月21日 | STM32 TIM1输入捕获配置

2019-08-21 来源:eefocus

最近做一个IRIG-B码对时的项目用到STM32的TIM1输入捕获功能,配置TIM1的输入捕获遇到很多坑,在这里总结下,希望对大家有帮助。


项目中用到的输入引脚为PE13,为TIM1_H3即TIM1的第3通道,这里提醒大家在使用引脚功能时最好查看引脚的重映象表,看是否要开启重映象,功能为捕获高电平脉宽,具体配置如下:


1.首先配置GPIO

/* GPIO引脚配置 */

void R_gpio_init(void)      

{

GPIO_InitTypeDef GPIO_InitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//开启引脚时钟

 

GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);  //开启TIM1重映象

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;         //PE13     

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     //引脚设置为上拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);

}

2.配置TIM1

/* TIM1输入捕获配置 */

void Time_init(void) 

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_ICInitTypeDef TIM1_ICInitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //TIM1 时钟使能

 

TIM_ClearITPendingBit(TIM1, TIM_IT_Update );     //清除TIM1更新中断标志 

 

//定时器 TIM1 初始化

TIM_TimeBaseStructure.TIM_Period = 7199; //设置自动重装载寄存器的周期值,使100ms产生一次中断

TIM_TimeBaseStructure.TIM_Prescaler = 999; //设置预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分频系数

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始化 TIM1

 

//TIM1输入捕获参数配置

TIM1_ICInitStructure.TIM_Channel = TIM_Channel_3; //捕获通道IC3

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

TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //直接映射

TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //不分频,每个变化沿都捕获

TIM1_ICInitStructure.TIM_ICFilter = 0x00;//不滤波

TIM_ICInit(TIM1, &TIM1_ICInitStructure);

 

//中断优先级 NVIC 配置

NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; //TIM1 捕获中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能

NVIC_Init(&NVIC_InitStructure); //初始化 NVIC 寄存器

 

TIM_ITConfig(TIM1,TIM_IT_Update|TIM_IT_CC3,ENABLE);       //使能更新中断和捕获中断

 

TIM_Cmd(TIM1, ENABLE);         //使能定时器

}

配置TIM1的时候有几点要很小心:


        1.TIM1在APB2时钟总线上,所以应使用RCC_APB2PeriphClockCmd()函数使能TIM1时钟;


        2.TIM1有多种中断,这里选择捕获比较中断,即TIM1_CC_IRQn;


        3.引脚为TIM1_CH3,即TIM1的3通道,中断标志位TIM_IT_CC3。


3.中断服务函数配置

/*    TIM1 中断服务程序   */

void TIM1_CC_IRQHandler(void)          

{

  if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //检查TIM1更新中断标志 

  {

    overflow++;

  }

  else if (TIM_GetITStatus(TIM1, TIM_IT_CC3) != RESET) //检查TIM1通道3捕获中断标志

  {

    if(state == START) //初始状态

    {

            overflow = 0;

            TIM_SetCounter(TIM1,0);

            state = WAIT_FALLING;

            TIM_OC3PolarityConfig(TIM1,TIM_ICPolarity_Falling); //设置为下降沿捕获

    }

    else if(state == WAIT_RISING)    //捕获上升沿

    {

       //     TIM1CH3_CAPTURE_VAL = TIM_GetCapture3(TIM1);     

       //     value = TIM1CH3_CAPTURE_VAL + (overflow*7200);

            overflow = 0;

            TIM_SetCounter(TIM1,0);

            state = WAIT_FALLING;

            TIM_OC3PolarityConfig(TIM1,TIM_ICPolarity_Falling); //设置为下降沿触发

    }

    else // 捕获下降沿

    {

            TIM1CH3_CAPTURE_VAL = TIM_GetCapture3(TIM1);

            value = TIM1CH3_CAPTURE_VAL + (overflow*7200);

 

            overflow = 0;

            TIM_SetCounter(TIM1,0);

            state = WAIT_RISING;

            TIM_OC3PolarityConfig(TIM1,TIM_ICPolarity_Rising); //设置为上升沿触发

    }

  }

  TIM_ClearITPendingBit(TIM1, TIM_IT_Update|TIM_IT_CC3 );     //清除TIM1更新中断标志和捕获标志 

}

这里需要注意几点:


       1.TIM1的中断服务函数名要注意,此次用到的是TIM1的捕获比较中断,所以为void TIM1_CC_IRQHandler(void);


       2.改变捕获极性的函数要注意,此处为改变通道3捕获极性的函数,所以为TIM_OC3PolarityConfig();


       3.通道3获取捕获值函数为TIM_GetCapture3();


       4.因为我只需要高电平脉宽,所以只需要在捕获上升沿的时候获取捕获值即可。


经过测试高电平脉宽为10毫秒时捕获值为720,5ms时捕获值为360。


公式为:脉宽=((1 + TIM_Prescaler)/系统时钟频率)*捕获值

推荐阅读

史海拾趣

Antenna Factor公司的发展小趣事

随着无线通信技术的快速发展,Antenna Factor公司始终保持敏锐的洞察力,不断推出创新产品。他们研发的智能天线系统,能够根据信号环境的变化自动调整参数,显著提高通信质量和稳定性。这一技术创新在市场上引起了广泛的关注,使得Antenna Factor公司在行业中树立了技术领先的形象。

Hexawave公司的发展小趣事

随着公司实力的不断增强,Antenna Factor公司开始将目光投向国际市场。他们积极参加国际电子展会和技术交流活动,与全球各地的客户和合作伙伴建立了广泛的联系。同时,公司还加大了对海外市场的研发投入和市场推广力度,逐步实现了产品的全球化销售。这一战略不仅为公司带来了更广阔的发展空间,也提升了其在全球电子行业中的竞争力。

通过以上五个故事,我们可以看到Antenna Factor公司在电子行业中的发展历程和取得的成就。他们以技术创新为驱动,不断突破自我,积极拓展市场,加强质量管理和品牌建设,逐步实现了公司的快速发展和壮大。未来,随着无线通信技术的不断进步和应用领域的不断拓展,相信Antenna Factor公司将继续保持领先地位,为电子行业的发展做出更大的贡献。

Emerson Embedded Power公司的发展小趣事

随着数字化技术的快速发展,Emerson Embedded Power紧跟时代潮流,积极推动数字化转型。该公司利用大数据、云计算等先进技术,优化产品设计、生产和供应链管理,提高了生产效率和产品质量。同时,公司还积极探索数字化营销和服务模式,为客户提供更加便捷、高效的服务体验。

Equator Technologies公司的发展小趣事

面对日益激烈的市场竞争和技术变革,Equator始终保持着持续创新的精神。公司不断投入研发资源,探索新的技术方向和应用场景。例如,在人工智能和机器学习领域,Equator正在积极开展相关研究和实践工作,探索将这些先进技术应用于视频处理领域的可能性。通过持续创新和努力,Equator正致力于引领电子行业未来的发展方向。

Hi-Light Electronic Co Ltd公司的发展小趣事

Equator Technologies公司成立于XX年代初,当时正值数字视频技术飞速发展的时代。公司凭借其在视频DSP(数字信号处理器)领域的独特见解和技术实力,迅速崭露头角。起初,Equator主要聚焦于提供高性能的视频处理解决方案,用于改善电视和其他显示设备的画质。通过不断的技术创新和产品迭代,Equator逐渐在市场中建立了良好的口碑。

Herley New York公司的发展小趣事

面对日益激烈的市场竞争和技术变革,Equator始终保持着持续创新的精神。公司不断投入研发资源,探索新的技术方向和应用场景。例如,在人工智能和机器学习领域,Equator正在积极开展相关研究和实践工作,探索将这些先进技术应用于视频处理领域的可能性。通过持续创新和努力,Equator正致力于引领电子行业未来的发展方向。

问答坊 | AI 解惑

轻型客车电控燃油喷射的系统方案

  摘要:本文介绍典型的轻型客车电控燃油喷射系统方案的基本组成,主要传感器及其工作原理、自诊断系统,分析ECU 控制电路的工作过程。 关键词:电控燃油喷射系统 ECU 系统控制电路 自诊断系统 前言 随着世界环境保护的呼声越来越高,国家环保 ...…

查看全部问答>

继续9650的问题

现在的问题是图像已经清楚了,只是发现不只是一个窗口显示图像,有若干个连着的窗口都显示,不知原因,望各位高手指教…

查看全部问答>

如何防止软件读取我的主板或CPU的序列号啊?

下载个软件,第二次安装的时候,就提示我已经安装过一次,不给再安装了,我想可能是软件读取了序列号什么的,如何不让读取,或读取到假的?…

查看全部问答>

legacy SD Bus Driver和SD Bus Driver

求助!!!     最近在调试一个WinCE项目,学着玩的!~     在选组件时,选到Device Drivers下sd及sdio时,sd下有两个单选项:legacy SD Bus Driver和SD Bus Driver,想问问他俩有啥区别啊?      SDIO ...…

查看全部问答>

wince驱动开发

请问朋友们,wince驱动开发可以有什么具体的开发项目,介绍几个,要求能够拿出台面展示或者能够参加程序设计比赛的。 …

查看全部问答>

stm32的USB问题

请版主删除,此程序有问题. stm32usb.rar (15.55 KB) 下载次数:11 2011-2-15 20:27 …

查看全部问答>

求助:μC/OS-2有何优势?

一直没接触过操作系统, 程序中一直是一个while(1)循环, 顺序执行相应的任务, 突发时间就用中断处理, 如果用μC/OS-2, 有什么不一样了?…

查看全部问答>

2012年山东省电子设计竞赛原件清单

本帖最后由 paulhyde 于 2014-9-15 03:46 编辑 1、基本仪器清单 数字电桥 直流稳压电源 量角器 米尺 四位半数字万用表 0~200℃温度计 秒表 20MHz双路普通示波器 2、主要元器件清单 MSP430单片机 显示器件 小型电动车 晶体三极管 标准 ...…

查看全部问答>

分享4.3寸LCD驱动资料

LCD通用时序设计: 原帖请见:http://www.cnblogs.com/fishplj2000/archive/2012/02/29/2373465.html    2012-02-29 15:08:34 一、水平扫描一行:      parameter    |||||     &nbs ...…

查看全部问答>

9851要两个,80M1mv能得60分,AD不高速,需要变压器

本帖最后由 paulhyde 于 2014-9-15 03:04 编辑 四句话不相干的,别看岔了 [ 本帖最后由 huo_hu 于 2013-9-3 18:19 编辑 ]    …

查看全部问答>