
TIM1的 PWM输入模式 捕获一个PWM的周期 及 占空比,想使用DMA,将读取CCR1 CCR2的数据到 两个数组Period[32] Duty[32]。如下: 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) } } .............. } |
评分
查看全部评分
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);