对于外部脉冲(方波)计数,通用的方法为捕获比较方式,由于项目对于脉冲的精度要求比较高,在快速搭建代码测试过后,发现该方法并不能满足需求,进而寻求计数更为精确的方法----ETR计数。
在测试ETR计数后,其精度如下表:

频率 误差
10kHz~20kHz 1~2Hz
<10kHz 0~1Hz

测试条件:1、在输入电压为1Vrms;
2、计时定时器5计时时间为1s; 定时器2位ETR功能定时器,定时器5为1s定时器。 定时器配置代码:

void MX_TIM2_Init(void)//ETR定时器配置
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};htim2.Instance = TIM2;htim2.Init.Prescaler = 0;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 0xffffff;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED;sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;sClockSourceConfig.ClockFilter = 0;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}
}void MX_TIM5_Init(void)//1s定时器
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};htim5.Instance = TIM5;htim5.Init.Prescaler = 83;htim5.Init.CounterMode = TIM_COUNTERMODE_UP;htim5.Init.Period = 1000000;htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim5) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK){Error_Handler();}
}

DMA配置代码

 if(tim_baseHandle->Instance==TIM5){hdma_tim5_up.XferCpltCallback = myDMAtime;/* TIM5 clock enable */__HAL_RCC_TIM5_CLK_ENABLE();/* TIM5 DMA Init *//* TIM5_UP Init */hdma_tim5_up.Instance = DMA1_Stream6;hdma_tim5_up.Init.Channel = DMA_CHANNEL_6;hdma_tim5_up.Init.Direction = DMA_PERIPH_TO_MEMORY;hdma_tim5_up.Init.PeriphInc = DMA_PINC_DISABLE;hdma_tim5_up.Init.MemInc = DMA_MINC_DISABLE;hdma_tim5_up.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;hdma_tim5_up.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;hdma_tim5_up.Init.Mode = DMA_CIRCULAR;hdma_tim5_up.Init.Priority = DMA_PRIORITY_MEDIUM;hdma_tim5_up.Init.FIFOMode = DMA_FIFOMODE_DISABLE;if (HAL_DMA_Init(&hdma_tim5_up) != HAL_OK){Error_Handler();}__HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_UPDATE],hdma_tim5_up);//配置为定时器溢出DMA传输}

定时器5DMA中断函数

void myDMAtime(DMA_HandleTypeDef * hdma)//TIM2清零
{TIM2->CNT = 0;
}

主函数初始化中开启DMA与定时器

void InitFretest(void)
{HAL_DMA_Start_IT(&hdma_tim5_up,(uint32_t)&TIM2->CNT,(uint32_t)&TimerFreTest,1);__HAL_TIM_ENABLE_DMA(&htim5, TIM_DMA_UPDATE);HAL_TIM_Base_Start(&htim2); HAL_TIM_Base_Start(&htim5);
}

最终,脉冲计数结果保存在TimerFreTest内。

计算公式:f=n/t;
其中:f为脉冲频率;
n为定时器计数个数;
t为定时器计数时间;

使用STM32F4定时器的ETR功能对外部脉冲进行计数相关推荐

  1. STM32F4定时器

    STM32F4定时器 STM32一共有三种定时器,总共有14个定时器. 高级定时器 TIM1.TIM8 . 通用定时器 TIM2.TIM5.TIM3.TIM4,TIM9~TIM14 , 其中2.5是3 ...

  2. STM32-通用定时器基本定时功能

    1.     STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器.其中系统嘀嗒定时器是前文中所 ...

  3. 555定时器的引脚功能及应用电路

    555定时器是一种广泛应用的集成电路组件,自1971年由签署尼尔森(Camenzind)发明以来,已经成为电子工程师设计电路中的一种常用工具.555定时器凭借其简单的结构.稳定的性能.低成本和易用性, ...

  4. stm32学习笔记 TIM定时器中断1.定时器基本定时功能(含代码)

    TIM定时器分四个部分 目录 一.定时器基本定时功能 二.定时器输出比较功能 三.定时器输入捕获功能 四.定时器编码接口 一.定时器基本定时功能 RCC时钟树 SystmInit函数 外部晶振出问题会 ...

  5. STM32F407-高级定时器PWM输入功能

    高级定时器PWM输入功能是输入捕获功能的一个特例,经常用于测量PWM脉冲和频率. PWM信号输入只能从通道1或者通道2输入. 以通道1输入PWM时应该选择TI1FP1为触发输入信号:以通道2输入PWM ...

  6. 使用 FlipClock.js 制作精美的时钟、定时器和倒计时功能

    FlipClock.js 被创建出来是因为其他的解决方案不够抽象,不能够在不重写的代码的情况下提供了深层次的自定义.有些库的参数过多,而另外一些则是脚本中的硬编码太多,不够灵活. 在参考许多现有的解决 ...

  7. html倒计时timer,js如何使用定时器实现倒计时功能

    这次给大家带来js如何使用定时器实现倒计时功能,js使用定时器实现倒计时功能的注意事项有哪些,下面就是实战案例,一起来看一下. 日期函数 倒计时 = 用 将来的时间 - 现在的时间 问题:将来时间 距 ...

  8. STM32F103定时器输入捕获功能

      STM32F103单片机的定时器不仅能输出PWM波,而且还能捕获输入的PWM波.可以通过定时器的捕获功能测量输入PWM波的周期和占空比.其中定时器的输入捕获功能如下:   在输入捕获模式下,当检测 ...

  9. java的定时器不能提供实时保证_Spring Boot 2 整合 QuartJob 实现定时器实时管理功能...

    一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...

  10. STM32F407通过定时器ETR实现外部高频波形计数功能

    定时器TIM2为32位定时器,设置为外部时钟源模式2,ETR引脚作为输入,对输入信号进行分频可降低MCU的响应,CNT获得分频后的计数器值,通过TIM3和TIM3主从模式获得精准的1s定时. 定时器2 ...

最新文章

  1. RunTime的使用-Category改变整个项目全部字体
  2. 快捷技巧之一键查自己电脑所有打开的端口的具体操作
  3. 前端编程提高之旅(六)----backbone实现todoMVC
  4. Linux shell去除字符串中所有空格
  5. python回顾(九)——函数高级,递归函数,匿名函数
  6. vue 安装指定版本swiper_Vue中的runtime-only和runtime-compiler
  7. Ansible系列--Copy模块
  8. java 左右两边数据类型不一样_java基础语法
  9. C++发送HTTP请求获取网页HTML代码
  10. QueryDSL依赖
  11. 十一则:程序员冷“笑话”据说只有真正的程序员才看得懂
  12. RB女歌手宇西个人单曲《盛宴》上线 诠释独自疗伤的故事
  13. shopex mysql 数据库服务器_win2003以isapi的方式配置php+mysql环境(安装了shopEX) 毕竟我是杨小飞i...
  14. 亥姆霍兹线圈主要用途有哪些
  15. mapper method ......attempted to return null from.....
  16. linux如何查看内存ddr几代,如何通过命令查看内存是ddr2还是ddr3的?
  17. 关于新闻类应用快速开发框架的思考
  18. BackupPC 备份迁移的使用
  19. 王峰:创业就是长征,能扛才能称王
  20. Word2010如何从正文开始设置页眉页码?

热门文章

  1. 省心!2021精选APP macOS装机必备清单来了
  2. 【论文浅读】《Deep Pyramidal Residual Networks for Spectral–Spatial Hyperspectral Image Classification》
  3. ORA-01790 expression must have same datatype as corresponding expression 问题解决
  4. abap --MOVE-CORRESPONDING
  5. micropython nodemcu 获取天气预报_NodeMCU获取并解析心知天气信息
  6. access有效性规则不为空值_在设置access有效性规则中,大于0并且小于100怎么写?...
  7. 关于如何使用DirectX11进行编程的相关问题
  8. iOS 新浪新闻首页卡片滚动特效实现
  9. 五. 服务的注册 DiscoveryClient 与 ServiceRegistry 服务的发现的简单介绍
  10. 百度大脑人脸识别助力企业实现无感考勤