本人小白,最近接触h7,全程用cubemx配置的,相关dma和tim配置如下,APB1时钟200mhz。现象如下,如果pwm_buffer[PWM_BUFFER_SIZE] = {10,10,20,30}; 输出的波形居然是时间极长的斜波,当pwm_buffer[PWM_BUFFER_SIZE] = {10,10,20,0};输出的波形只有一个周期高电平,理论上来讲是4个。同样的配置和方法放f103上是没问题的,h7的dma用这种最简单的方式输出pwm有什么特殊的配置吗,求助各位大佬。
下面是我的配置文件
cubemx配置
cubemx配置
cubemx配置
下面是放在freertos中循环运行的任务代码
#include "moto.h"
#include "tim.h"
// 定义 PWM 占空比数组
#define PWM_BUFFER_SIZE 4
uint16_t pwm_buffer[PWM_BUFFER_SIZE] = {10,10,20,0};
void Start_PWM_DMA(void)
{
// 启动 TIM2 PWM + DMA 传输
if (HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t*)pwm_buffer, PWM_BUFFER_SIZE) != HAL_OK)
{
Error_Handler();
}
}
/* USER CODE BEGIN Header UpdateData */
/**
* @brief Function implementing the Update thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header UpdateData */
void UpdateData(void *argument)
{
/* USER CODE BEGIN UpdateData */
/* Infinite loop */
for(;;)
{
Start_PWM_DMA();
osDelay(50);
}
/* USER CODE END UpdateData */
}
回调函数关闭dma:
/* USER CODE BEGIN 2 */
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
HAL_TIM_PWM_Stop_DMA(&htim2, TIM_CHANNEL_1);
}
/* USER CODE END 2 */
下面是波形
pwm_buffer[PWM_BUFFER_SIZE] = {10,10,20,0}的时候:
pwm_buffer[PWM_BUFFER_SIZE] = {10,10,20,0};
pwm_buffer[PWM_BUFFER_SIZE] = {10,10,20,30}的时候 :
pwm_buffer[PWM_BUFFER_SIZE] = {10,10,20,30};
|