cube配置定时器ETR2模式测频实验

一、设计方案:

1、STM32F1系列共有8个定时器,选取两个通用定时器进行配置;
2、一个定时器用作1S定时,一个配置为外部时钟模式2;
3、ETR2模式下会对信号上升沿进行计数。

1、通用定时器框图:在这里插入图片描述

2、具体配置及原理:

(1)、配置TIM4为ETR2模式,选择极性,触发控制器进行计数,CNT值满后进入定时器中断溢出。因为计数器只有16位,记65536次便会溢出,在中断服务函数中定义一个变量对溢出值进行储存,大大增加了测频的上限。
(2)、配置TIM5定时1S进入中断,在中断中对数据进行处理打印。

3、cubeMX配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开启定时器中断

二、程序代码

    HAL_TIM_Base_Start(&htim4); //main.c中开启定时器及中断
	HAL_TIM_Base_Start(&htim5);
	HAL_TIM_Base_Start_IT(&htim4);	
	HAL_TIM_Base_Start_IT(&htim5);
	
	void TIM4_IRQHandler(void)
    {
	  /* USER CODE BEGIN TIM4_IRQn 0 */
	
	  /* USER CODE END TIM4_IRQn 0 */
	  HAL_TIM_IRQHandler(&htim4);
	  /* USER CODE BEGIN TIM4_IRQn 1 */
	  __HAL_TIM_CLEAR_FLAG(&htim4,TIM_FLAG_UPDATE); //清除更新中断标志位
	
				count_x ++ ;  						//计数器溢出后变量进行自加
	
	  /* USER CODE END TIM4_IRQn 1 */
	}
	void TIM5_IRQHandler(void)
	{
	  /* USER CODE BEGIN TIM5_IRQn 0 */
	
	  /* USER CODE END TIM5_IRQn 0 */
		HAL_TIM_IRQHandler(&htim5);
	  /* USER CODE BEGIN TIM5_IRQn 1 */
		__HAL_TIM_CLEAR_FLAG(&htim5,TIM_FLAG_UPDATE);
	
	  	count_ms = TIM4->CNT;                       //读取计数器未溢出数
		count_s = count_x*65536 + count_ms;			//溢出数*65536+未溢出数
		count_c = count_s+(count_s*0.00137);        //数据修正
		printf("%d HZ \r\n ",count_c);	            //打印数据
	
		count_x=0;
		TIM4->CNT=0;
	
	  /* USER CODE END TIM5_IRQn 1 */
	}

三、测试结果

在这里插入图片描述
身边条件有限,最大只测到5MHz,故目前来看测量范围在1HZ到5MHz都较为准确,测量误差值最大为0.02%。

若有概念错误或陈述不清处,请指正。。

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
引用\[1\]中提到,定时事件生成时间主要由TIMx_PSC和TIMx_ARR两个寄存器值决定,其中TIMx_ARR设置为9999可以实现1s的定时周期。接下来需要设置TIMx_PSC寄存器值,使得CK_CNT输出为100us周期的时钟。根据引用\[1\]中的说明,预分器的输入时钟CK_PSC为84MHz,所以设置预分器值为(8400-1)即可满足要求。 引用\[2\]中提到,定时计算公式为Tout = ((Counter+1)*(Prescaler+1))/Tclk,其中Tclk为TIM1的输入时钟率,为72MHz。根据这个公式,可以计算出TIM1的溢出时间Tout。同时,Prescaler为分系数,Counter为自动重装值。 引用\[3\]中提到,STM32F1系列共有8个定时器,可以选择其中两个通用定时器进行配置。一个定时器可以用作1s定时,另一个可以配置为外部时钟模式2,在该模式下会对信号上升沿进行计数。 综上所述,根据引用\[1\]和引用\[2\]的说明,可以使用CubeIDE配置同一个定时器ETR模式,其中一个定时器用作1s定时,另一个配置为外部时钟模式2。具体的配置和原理可以参考引用\[3\]中的通用定时器框图和具体配置说明。 #### 引用[.reference_title] - *1* [STM32 CubeIDE(七)基本定时器](https://blog.csdn.net/LiaoZiJi/article/details/112234550)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32 CUbeIDE 定时器中断使用](https://blog.csdn.net/weixin_45488643/article/details/108185571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [cube配置定时器ETR2模式实验](https://blog.csdn.net/weixin_45117564/article/details/103440442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值