OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 512|回复: 1

STM32F072x8通过DMA发送PWM波形异常,求助,求助,求助

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2024-5-30
在线时间
0 小时
发表于 2024-5-30 16:13:08 | 显示全部楼层 |阅读模式
1金钱
我在使用STM32F072x8通过DMA发送PWM控制RGB灯,遇到一个问题:外部时钟8M,RCC_PLL_MUL4 = 32M。
然后用的TIM15,
htim1.Init.Prescaler = 1 - 1;
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 40 - 1;  //频率为800k。


Pulse为20,15。

但是我通过dma发送2个数据时,实际发出去的波形为 PMW1正常占空比,0,PWM正常占空比,0;
当把Period改成1000时,数据就正常了,感觉是DMA发送完一个数据以后,第二个数据没有给过去。
有了解的帮忙看下code,不胜感激。


  hdma_tim.Instance = DMA1_Channel2;               //使用哪个DMA通道
  hdma_tim.Init.Direction = DMA_MEMORY_TO_PERIPH;  //方向:存储区到外设寄存器
  hdma_tim.Init.PeriphInc = DMA_PINC_DISABLE;      //外设寄存器不递增
  hdma_tim.Init.MemInc = DMA_MINC_ENABLE;          //存储区地址递增
  hdma_tim.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;//外设寄存器数据位宽度,2字节
  hdma_tim.Init.MemDataAlignment = DMA_PDATAALIGN_HALFWORD;//存储区数据位宽度,2字节
  hdma_tim.Init.Mode = DMA_NORMAL;                 //单次
  hdma_tim.Init.Priority = DMA_PRIORITY_MEDIUM;    //优先级中等

        __HAL_LINKDMA(htim1,hdma[TIM_DMA_ID_CC2],hdma_tim);  //DMA双向LINK连接
        HAL_DMA_Init(&hdma_tim);
  HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 3, 0);  //设置优先级
  HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);          //打开中断



    htim1.Instance = TIM15;
    htim1.Init.Prescaler = 1 - 1;
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 40 - 1;  //自动重载值是10,刚好是800k
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim1.Init.RepetitionCounter = 0;
    htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
    {
        Error_Handler();
    }

    //__HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_UPDATE);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2024-5-31 17:30:40 | 显示全部楼层
看不太懂,你看看能不能弄清楚是什么条件触发DMA请求的?两次请求之间的间隔是否足够?占空比是立即生效还是下个周期生效?
专治疑难杂症
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 19:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表