分享:STM32 TIM5 输入捕获PWM周期频率,欢迎拍砖

2019-12-24 18:39发布

之前搜索坛里,发现没有STM32输入捕获测量频率的程序,要么就是未解决的帖子。
经过一段时间琢磨,了解了定时器中断触发的原理,根据原子哥的测高电平脉宽的程序,修改了一下,
主要功能就是定时器输入捕获方波的周期,然后通过串口打印信息。
现整理好了工程,上传上来,通过串口显示出来,希望高手拍砖。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
weshare
2019-12-25 17:07
ahong2hao 发表于 2015-3-28 09:21
定时器的从模式reset该如何配置,能给个参考吗?

  1. void Tmr3_Config(void)
  2. {
  3.         TIM_TimeBaseInitTypeDef TIM_TmrBaseInitStructure;
  4.   TIM_ICInitTypeDef  TIM_ICInitStruct;
  5.        
  6.         Tmr3_GPIO_Config();
  7.        
  8.   /* 开启定时器3的时钟 */
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  10.        
  11.         /* 为定时器3设置内部时钟为计数源 */
  12.         TIM_InternalClockConfig(TIM3);
  13.                
  14.         /* 定时器设置为向上计数模式 */
  15.         TIM_TmrBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  16.         /* 定时器的周期设置 */
  17.         TIM_TmrBaseInitStructure.TIM_Period = 10000-1;
  18.         /* 分频系数为7200 */
  19.         TIM_TmrBaseInitStructure.TIM_Prescaler =  7200-1;
  20.         /* fDTS的分频系数 */
  21.         TIM_TmrBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  22.         /* 设置定时器3时基 */
  23.         TIM_TimeBaseInit(TIM3,&TIM_TmrBaseInitStructure);
  24.        
  25.         TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);
  26.        
  27.         /* 设置通道1为输入通道 */
  28.         TIM_ICInitStruct.TIM_Channel =  TIM_Channel_1;
  29.         /* 关闭滤波器 */
  30.         TIM_ICInitStruct.TIM_ICFilter = 0x0;
  31.         /* 设置触发源为上升沿 */
  32.         TIM_ICInitStruct.TIM_ICPolarity  = TIM_ICPolarity_Falling;
  33.         /* 触发源分频系数为1 */
  34.         TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  35.         /* 选择通道1为触发源 */
  36.         TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
  37.         /* 设置定时器3通道1为输入 */
  38.         TIM_ICInit(TIM3,&TIM_ICInitStruct);
  39.        
  40.         /* 设置通道2为输入通道 */
  41.         TIM_ICInitStruct.TIM_Channel =  TIM_Channel_2;
  42.         /* 关闭滤波器 */
  43. //        TIM_ICInitStruct.TIM_ICFilter = 0x4;  //不用进行设置
  44.         /* 设置触发源为上升沿 */
  45.         TIM_ICInitStruct.TIM_ICPolarity  = TIM_ICPolarity_Rising ;
  46.         /* 触发源分频系数为1 */
  47.         TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  48.         /* 选择通道1为触发源 */
  49.         TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;
  50.         /* 设置定时器3通道1为输入 */
  51.         TIM_ICInit(TIM3,&TIM_ICInitStruct);
  52.        
  53.         /* 重置模式设置通道2为触发源 */
  54.         TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);     
  55.         /* 配置定时器通道2的中断 */
  56.         TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);
  57.         /* 开启定时器3 */
  58.         TIM_Cmd(TIM3,ENABLE);
  59. }
复制代码

一周热门 更多>