硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1856|回复: 4
收起左侧

[有问必答] 定时器OC通道,怎么同时打开和关闭?

[复制链接]

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2022-2-18 15:14:02 | 显示全部楼层 |阅读模式
我试了这个HAL函数,失败了。
HAL_TIM_OC_Start(&htim4,TIM_CHANNEL_1|TIM_CHANNEL_2);//启动TIM4的CH1和CH2的PWM输出。

怎么写比较好?


回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
 楼主| 发表于 2022-2-18 15:16:30 | 显示全部楼层
还有个试法,结果也很奇怪。。。
TIM_CCxChannelCmd(TIM4,TIM_CHANNEL_1,TIM_CCx_ENABLE);  //OC1允许
TIM_CCxChannelCmd(TIM4,TIM_CHANNEL_2,TIM_CCx_ENABLE);  //OC2允许
HAL_TIM_Base_Start(&htim4); //启动定时器
delay_us(1000);
HAL_TIM_Base_Stop(&htim4); //关闭定时器

结果是2路pwm持续输出,无法停止。。。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
 楼主| 发表于 2022-2-18 15:44:04 | 显示全部楼层
caicaptain2 发表于 2022-2-18 15:16
还有个试法,结果也很奇怪。。。
TIM_CCxChannelCmd(TIM4,TIM_CHANNEL_1,TIM_CCx_ENABLE);  //OC1允许
TI ...

翻到HAL库里面,发现HAL在处理定时的start和stop的时候,语法不一样。
start的时候,直接CR1就enable;
stop的时候,好长长一串,必须在CC通道关闭的时候,才能停止:
#define __HAL_TIM_DISABLE(__HANDLE__) \
  do { \
    if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
    { \
      if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
      { \
        (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
      } \
    } \
  } while(0)
回复

使用道具 举报

5

主题

229

回帖

249

积分

高级会员

积分
249
发表于 2022-2-18 15:44:46 | 显示全部楼层
caicaptain2 发表于 2022-2-18 15:16
还有个试法,结果也很奇怪。。。
TIM_CCxChannelCmd(TIM4,TIM_CHANNEL_1,TIM_CCx_ENABLE);  //OC1允许
TI ...

你是输出PWM还是OC输出比较,PWM使用函数 HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1); 想停止PWM可以使用设置PWM占空比来输出高或者低 __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_1, tu32_Value);
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
 楼主| 发表于 2022-2-21 08:51:34 | 显示全部楼层
旮旯旭 发表于 2022-2-18 15:44
你是输出PWM还是OC输出比较,PWM使用函数 HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1); 想停止PWM可以使用 ...

PWM和OC比较输出是一回事。 OC输出的模式已经设定PWM1模式了。

需要同一个定时器的2路PWM(即OC输出模式PWM)同时开启和关闭,还没有找到合适的方法。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 03:06 , Processed in 0.038455 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表