ST意法半导体
直播中

李燕

8年用户 1637经验值
私信 关注
[问答]

PWM生成模式下无法开始向上计数TIM3怎么解决?

我使用安装在我自己的板上的 STM32MP151CAA3。
我想在 Cortex-M4 的 PWM 生成模式下开始对 tiM3 进行计数。

我写了下面的代码,但是,TIM3并没有开始计数(第56行之后,TIM3_CNT的值根本没有改变)。
在此代码中,PB04 端口用作 PWM 输出端口。

  • void TIM3_Count_Start(void)
  • {
  •         TIM_HandleTypeDef m_handleTim3;
  •         TIM_OC_InitTypeDef sConfigOC;
  •         TIM_SlaveConfigTypeDef sSlaveConfig;
  •         TIM_MasterConfigTypeDef sMasterConfig;
  •         GPIO_InitTypeDef GPIO_InitStruct;
  •         /* Peripheral clock enable */
  •         __TIM3_CLK_ENABLE();
  •         GPIO_InitStruct.Pin = GPIO_PIN_4;
  •         GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  •         GPIO_InitStruct.Pull = GPIO_NOPULL;
  •         GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  •         GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
  •         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  •         m_handleTim3.Instance = TIM3;
  •         m_handleTim3.Init.Prescaler = 0;
  •         m_handleTim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  •         m_handleTim3.Init.Period = 0;
  •         m_handleTim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  •         HAL_TIM_Base_Init(&m_handleTim3);
  •         HAL_TIM_PWM_Init(&m_handleTim3);
  •         sConfigOC.OCMode = TIM_OCMODE_PWM1;
  •         sConfigOC.Pulse = 0xFFFF;
  •         sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  •         sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  •         HAL_TIM_PWM_ConfigChannel(&m_handleTim3, &sConfigOC, TIM_CHANNEL_1);
  •         sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
  •         sSlaveConfig.InputTrigger = TIM_TS_ITR0;
  •         HAL_TIM_SlaveConfigSynchronization(&m_handleTim3, &sSlaveConfig);
  •         sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  •         sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  •         HAL_TIMEx_MasterConfigSynchronization(&m_handleTim3, &sMasterConfig);
  •         TIM3->PSC = 399;
  •         TIM3->ARR = 49;
  •         TIM3->CCR1 = 0xFFFF;
  •         TIM3->CR1 |= 0x0080;
  •         TIM3->EGR |= TIM_EGR_UG;
  •         TIM3->CCER |= 0x0001;
  •         TIM3->SR = 0;
  •         TIM3->DIER |= 0x0001;
  •         TIM3->CR1 |= 0x0001;                /* TIM3 Count Start */
  • }
上面的代码有什么遗漏吗?








回帖(1)

白桦

2023-2-3 15:15:45
> sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
如果您希望定时器自行运行,请将其设置为 TIM_SLAVEMODE_DISABLE。否则,您需要确保有一个外部时钟源驱动它。
举报

更多回帖

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