久芯网

f407 配置 DMA TIM PWM 一直无法生效?

avatar zzi 提问时间: 2023-07-09 12:05:29 / 未解决
使用HAL库配置 TIM 输出DMA PWM ,几乎差不多的 代码,F103可以启动,但F407无法启动。可否有例程可以参考,感觉资料太少了。

if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)                //HAL_TIM_OC_Init 同样不行,都调用到DMA配置了。
  {
    Error_Handler();
  }

  sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
  sConfigOC.Pulse = 50;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
  if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
TIM2->CR1 |= ((uint16_t)0x0081);                        //TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM2->DIER &= ~TIM_DMA_UPDATE;
HAL_DMA_Start_IT(htim2.hdma[TIM_DMA_ID_UPDATE], (uint32_t)SLOWRUN, (uint32_t)TIM2->ARR,100);


2个回答
  • avatar butterflyspring
    回答时间: 2023-07-09 12:30:23

    看看DMA的时钟有没有打开。如果没打开的话在初始化前打开。

  • avatar zzi
    回答时间: 2023-07-09 13:03:21

    非常感谢回复,由CUBEMX 自动配置,DMA时钟在上电初始化就开启。 HAL_TIM_MspPostInit(&htim5); //配置管脚重定向 if (HAL_TIM_PWM_Init(&htim5) != HAL_OK) //DMA初始化 { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 400; sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW; sConfigOC.OCFastMode = TIM_OCFAST_ENABLE; HAL_TIM_OC_ConfigChannel(&htim5,&sConfigOC,TIM_CHANNEL_3); TIM5->CR1|= ((uint16_t)0x0081); TIM5->DIER &= ~TIM_DMA_UPDATE; HAL_DMA_Start_IT(&hdma_tim5_ch3_up, (uint32_t)SLOWRUN, (uint32_t)TIM5->ARR,100); DMA1->HIFCR |= (1<< 21); //清中断 //uint16_t SLOWRUN[100],值已初始化 TIM5->CCER |= 0X100; //TIM5->DIER |= TIM_DMA_UPDATE; // UDE:更新 DMA 请求使能 TIM5->DIER |= 0X101; //对着手册开启 DMA_UPDA 和TIM_UPDA 上电后直接输出PWM波形,和DMA似乎没任何关系,SLOWRUN的值似乎传不到ARR

会员中心 微信客服
客服
回到顶部