我是靠谱客的博主 体贴大地,最近开发中收集的这篇文章主要介绍Stm32 使用定时器实现PWM可调脉宽和脉冲的一种简单易行方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Stm32 使用定时器实现PWM可调脉宽和脉冲的一种简单易行方法

https://download.csdn.net/download/u010923814/12678378

平台:cubeMX

芯片:stm32f103

1.时钟配置 工作频率48M

 

2. 定时器选择 TIM3

3. TIM3 配置

 

4. 程序封装

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
    if (htim == &htim3)
    {
        /* Configure the OPM Mode */
        htim->Instance->CR1 |= TIM_CR1_OPM;
    }
}/**
  * @brief
  *
  * @param Hz PWM频率
  * @param duty PWM占空比 0~100
  * @param pul PWM脉冲数
  *
  * @retval
  */
void Drv8825_PWM(int Hz, int duty, int pul)
{

    int arr;

    assert_param(duty < 100);

    arr = 1000000 / Hz;
    htim3.Instance->ARR = arr - 1;
    htim3.Instance->CCR1 = arr * (100 - duty) / 100;
    htim3.Instance->CR1 &= ~TIM_CR1_OPM;
    HAL_TIM_PWM_Start_DMA(&htim3, TIM_CHANNEL_1, &htim3.Instance->CCR1, pul);

}

 

 

5.使用方式

//频率1k,10%脉宽,10个脉冲。

Drv8825_PWM(1000, 50, 10);//程序不是阻塞!重复调用记得延时

经过测试10k以下频率都是ok,如果要高点,需要在DMA完成中断调用以下语句:

htim->Instance->CR1 |= TIM_CR1_OPM;

HAL_TIM_PWM_PulseFinishedCallback(...)可以去掉。

最后

以上就是体贴大地为你收集整理的Stm32 使用定时器实现PWM可调脉宽和脉冲的一种简单易行方法的全部内容,希望文章能够帮你解决Stm32 使用定时器实现PWM可调脉宽和脉冲的一种简单易行方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部