eric2013 发表于 2022-6-6 14:51:07

定时器直接输出0.1Hz波形是否可以,明确的说,完全没问题,提供个配置代码(2022-06-06)

不需要做定时器级联,直接直接配置就行,贼简单。
PWM频率 = TIMxCLK / (usPrescaler + 1)/(usPeriod + 1)

16bit定时器可以的, usPrescaler 参数16bit范围, usPeriod 参数16bit范围。
32bit定时器更可以,usPrescaler 参数16bit范围, usPeriod 参数32bit范围。

比如下面,我的就是16bit定时器TIM4的输出配置:

      /*PWM频率 = TIMxCLK / usPrescaler + 1)/usPeriod + 1)*/
      TimHandle.Instance = TIMx;
      TimHandle.Init.Prescaler         = 65535;
      TimHandle.Init.Period            = 12817;
      TimHandle.Init.ClockDivision   = 0;
      TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
      TimHandle.Init.RepetitionCounter = 0;
      TimHandle.Init.AutoReloadPreload = 0;
      if (HAL_TIM_PWM_Init(&TimHandle) != HAL_OK)
      {
                Error_Handler(__FILE__, __LINE__);
      }

      /* 配置定时器PWM输出通道 */
      sConfig.OCMode       = TIM_OCMODE_PWM1;
      sConfig.OCPolarity   = TIM_OCPOLARITY_HIGH;
      sConfig.OCFastMode   = TIM_OCFAST_DISABLE;
      sConfig.OCNPolarity= TIM_OCNPOLARITY_HIGH;
      sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
      sConfig.OCIdleState= TIM_OCIDLESTATE_RESET;

      /* 占空比 */
      sConfig.Pulse = 6408;
      if (HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TimChannel) != HAL_OK)
      {
                Error_Handler(__FILE__, __LINE__);
      }
      
      /* 启动PWM输出 */
      if (HAL_TIM_PWM_Start(&TimHandle, TimChannel) != HAL_OK)
      {
                Error_Handler(__FILE__, __LINE__);
      }


效果展示:






wh201906 发表于 2022-7-10 11:24:51

还可以降低系统主频或者总线时钟的频率,把TIMxCLK降下来
页: [1]
查看完整版本: 定时器直接输出0.1Hz波形是否可以,明确的说,完全没问题,提供个配置代码(2022-06-06)