请教下使用同一个定时器但是使用的通道不同功能是否可行 如使用定时器3,一个通道作为pwm输出,另外一个通道作为 红外遥控器 捕捉输入 通道 2 作为 pwm 通道 3 作为 红外遥控器输入捕捉 目前 定时器 3 的定时都设置为 100us,貌似 红外遥控器可以,但是 如果 pwm 不进行调节是可以的,但是只要进行调节 屏幕就会出现闪烁或者 屏幕亮度没有变化 红外遥控器配置 static void TIM3_IR_Init(void) { uint16_t uwPrescalerValue = 0; __IO uint32_t freq = HAL_RCC_GetSysClockFreq(); // HAL_RCC_GetHCLKFreq(); // /*##-1- Configure the TIM peripheral #######################################*/ /* Set TIMx instance */ TIM_HandleIR.Instance = TIM3; /* 预分频数,定时器主频=系统频率/2/分频系数-1,即一个时钟脉冲为100us */ uwPrescalerValue = (uint32_t) ( (uint32_t)( (uint32_t)(freq / 2UL) / 10000UL) - 1); TIM_HandleIR.Init.Period = 0x800; // 最大计数值 0xffff TIM_HandleIR.Init.Prescaler = uwPrescalerValue; // 遥控器解码与分频系数设置,100us TIM_HandleIR.Init.ClockDivision = 0; TIM_HandleIR.Init.CounterMode = TIM_COUNTERMODE_UP; TIM_HandleIR.Init.RepetitionCounter = 0; HAL_TIM_IC_Init(&TIM_HandleIR) ; //初始化TIM1输入捕获参数 sICConfigIR.ICPolarity=TIM_ICPOLARITY_BOTHEDGE; //双沿触发捕获 sICConfigIR.ICSelection=TIM_ICSELECTION_DIRECTTI;//映射到TI1上 sICConfigIR.ICPrescaler=TIM_ICPSC_DIV1; //配置输入分频,不分频 sICConfigIR.ICFilter= 0; //0-0x03; 的数值均可以,默认选择 0,,0x03=8个定时器时钟周期滤波 HAL_TIM_IC_ConfigChannel(&TIM_HandleIR,&sICConfigIR,TIM_CHANNEL_IRD);//配置TIM3通道3 HAL_TIM_IC_Start_IT(&TIM_HandleIR,TIM_CHANNEL_IRD); //开始捕获TIM3的通道3 } pwm 配置 { pulse = 0x800/2; HAL_TIM_PWM_DeInit(&TimHandle); /* PWM频率 = TIMxCLK / usPrescaler + 1)/usPeriod + 1)*/ TimHandle.Instance = TIMx; TimHandle.Init.Prescaler = 20000; // 100us usPrescaler; TimHandle.Init.Period = 0x800; //usPeriod; TimHandle.Init.ClockDivision = 0; TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; TimHandle.Init.RepetitionCounter = 0; TimHandle.Init.AutoReloadPreload = 0; HAL_TIM_PWM_Init(&TimHandle); /* 配置定时器PWM输出通道 */ sConfig.OCMode = TIM_OCMODE_PWM1; sConfig.OCPolarity = TIM_OCPOLARITY_HIGH; sConfig.OCFastMode = TIM_OCFAST_DISABLE; sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET; sConfig.OCIdleState = TIM_OCIDLESTATE_RESET; /* 占空比 */ sConfig.Pulse = pulse; HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TimChannel[_ucChannel]); /* 启动PWM输出 */ HAL_TIM_PWM_Start(&TimHandle, TimChannel[_ucChannel]); } 他们需要共用计数器的话,改如何设置参数才行啊 ??????????? |
评分
查看全部评分
因为输入捕捉会在Ch1触发的同时清空CNT的, 这个reset的动作会对其他通道的应用有影响,
评分
查看全部评分
哎,看来还是得分开比较好处理啊,搞到一起处理起来比较麻烦