你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下使用同一个定时器但是使用的通道不同功能是否可行

[复制链接]
hpdell 提问时间:2019-4-30 17:01 /
悬赏10ST金币未解决
请教下使用同一个定时器但是使用的通道不同功能是否可行


如使用定时器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]);
}


他们需要共用计数器的话,改如何设置参数才行啊 ???????????

收藏 评论3 发布时间:2019-4-30 17:01

举报

3个回答
wenyangzeng 回答时间:2019-4-30 17:42:47
同一个定时器不同通道可以运行不同功能,但工作频率必须相同。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

edmundlee 回答时间:2019-5-1 13:05:33
PWM不应该有问题, 有问题的是输入捕捉, 除非你把输入捕捉的复位CNT去掉(这需要后处理数据)
因为输入捕捉会在Ch1触发的同时清空CNT的, 这个reset的动作会对其他通道的应用有影响,

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

hpdell 回答时间:2019-5-4 12:21:53
edmundlee 发表于 2019-5-1 13:05
PWM不应该有问题, 有问题的是输入捕捉, 除非你把输入捕捉的复位CNT去掉(这需要后处理数据)
因为输入捕 ...

哎,看来还是得分开比较好处理啊,搞到一起处理起来比较麻烦

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版