STM32
直播中

fdvcxhtg

8年用户 1007经验值
擅长:嵌入式技术
私信 关注
[问答]

在stop模式下让LPTIM1和LPTIM2输出两路相同的PWM,不管是用LSI还是LSE都会有200us的相位差,为什么?

我这边要在stop模式下让LPtiM1和LPTIM2输出两路相同的PWM,不管是用LSI还是LSE都会有200us的相位差,但是不在stop模式下用内部主频的4Mhz的时钟源,就没有200us相位差,有人知道这是啥问题吗,谢谢
代码附上:
while (1)
  {

        HAL_LPTIM_PWM_Start( hlptim1,32-1,16-1);
        HAL_LPTIM_PWM_Start( hlptim2,32-1,16-1);
        HAL_Delay (2500);
        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);  //直接进入停止模式,中断唤醒。然后时间到了就会唤醒

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_LPTIM1
                              |RCC_PERIPHCLK_LPTIM2;
  PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSE;
  PeriphClkInit.Lptim2ClockSelection = RCC_LPTIM2CLKSOURCE_LSE;
  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;

void MX_LPTIM1_Init(void)
{

  /* USER CODE BEGIN LPTIM1_Init 0 */

  /* USER CODE END LPTIM1_Init 0 */

  /* USER CODE BEGIN LPTIM1_Init 1 */

  /* USER CODE END LPTIM1_Init 1 */
  hlptim1.Instance = LPTIM1;
  hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
  hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;
  hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
  hlptim1.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_LOW;
  hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
  hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
  hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;
  hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;
  if (HAL_LPTIM_Init( hlptim1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN LPTIM1_Init 2 */

  /* USER CODE END LPTIM1_Init 2 */

}

回帖(1)

张文婷

2024-4-3 11:26:20
首先需要使能LSE, 然后选择LP timer1 和 2 的工作模式为 Counts internal colock events ,其次选择 external trigger .
由外部触发信号触发才能使两个LPTIM同时工作,消除相位差。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分