wellsking 发表于 2018-8-7 15:58:17

使用cubeMX,TIM PWM输入模式发现的一个问题

TIM1的 PWM输入模式 捕获一个PWM的周期 及 占空比,想使用DMA,将读取CCR1 CCR2的数据到 两个数组PeriodDuty。如下:
HAL_TIM_IC_Start_DMA(&htim1,TIM_CHANNEL_1,(uint32_t*)Period,32);
HAL_TIM_IC_Start_DMA(&htim1,TIM_CHANNEL_2,(uint32_t*)Duty,32);


由于第一次调用HAL_TIM_IC_Start_DMA(&htim1,TIM_CHANNEL_1,(uint32_t*)Period,32);,
已经对htim->State 赋值: htim->State = HAL_TIM_STATE_BUSY; (2)

第二次调用HAL_TIM_IC_Start_DMA(&htim1,TIM_CHANNEL_2,(uint32_t*)Duty,32); 就直接 从 return HAL_BUSY; (1) 退出。
TIM_CHANNEL_2 无法 启动。

不修改cubeMX生成的函数情况下,
有其它的函数可以同时启动 两个TIM_CHANNEL吗?

HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
if((htim->State == HAL_TIM_STATE_BUSY))
{
   return HAL_BUSY; (1)
}
else if((htim->State == HAL_TIM_STATE_READY))
{
    if((pData == 0U ) && (Length > 0U))
    {
      return HAL_ERROR;
    }
    else
    {
    htim->State = HAL_TIM_STATE_BUSY; (2)
    }
}

..............

}

feixiang20 发表于 2018-8-7 23:19:26

无法同时捕获吧

wellsking 发表于 2018-8-8 09:08:26

是可以同时捕获的,
PWM输入模式就是为了同时捕获 频率,占空比。
目前我用下面的方法实现。
HAL_TIM_IC_Start_DMA(&htim1,TIM_CHANNEL_1,(uint32_t*)Period,32);
htim1.State = HAL_TIM_STATE_READY;
HAL_TIM_IC_Start_DMA(&htim1,TIM_CHANNEL_2,(uint32_t*)Duty,32);

bjdj0000 发表于 2018-9-7 09:57:13

大神,CUBEMX界面是怎么配置的能? 能否截个图分享一下?
页: [1]
查看完整版本: 使用cubeMX,TIM PWM输入模式发现的一个问题