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

STM32G070 TIM 单脉冲模式

[复制链接]
huahuahnu 提问时间:2023-8-21 09:54 / 未解决
使用PWM1功能结合单脉冲模式输出任意个数脉冲,比如输出3个脉冲,最后电平是高,为什么不是低电平?OCIdleState并不起作用,可以修改配置成低电平吗?下面是代码配置
  1. TIM_InitStruct.Prescaler = Prescaler;
  2.   TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  3.   TIM_InitStruct.Autoreload = Period;
  4.   TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  5.   TIM_InitStruct.RepetitionCounter = 2;
  6.   LL_TIM_Init(TIM1, &TIM_InitStruct);
  7.   LL_TIM_EnableARRPreload(TIM1);
  8.   LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH1);
  9.   TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
  10.   TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  11.   TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  12.   TIM_OC_InitStruct.CompareValue = Pulse;
  13.   TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;//LL_TIM_OCPOLARITY_LOW;//
  14.   TIM_OC_InitStruct.OCNPolarity = LL_TIM_OCPOLARITY_HIGH;
  15.   TIM_OC_InitStruct.OCIdleState = LL_TIM_OCIDLESTATE_LOW;
  16.   TIM_OC_InitStruct.OCNIdleState = LL_TIM_OCIDLESTATE_LOW;
  17.   LL_TIM_OC_Init(TIM1, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
  18.   LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH1);
  19. //  TIM_InitStruct.Autoreload = Period;
  20.   LL_TIM_SetOnePulseMode(TIM1, LL_TIM_ONEPULSEMODE_SINGLE);
  21.   LL_TIM_SetTriggerOutput(TIM1, LL_TIM_TRGO_RESET);
  22.   LL_TIM_SetTriggerOutput2(TIM1, LL_TIM_TRGO2_RESET);
  23.   LL_TIM_DisableMasterSlaveMode(TIM1);
  24.   TIM_BDTRInitStruct.OSSRState = LL_TIM_OSSR_DISABLE;
  25.   TIM_BDTRInitStruct.OSSIState = LL_TIM_OSSI_DISABLE;//LL_TIM_OSSI_ENABLE;//
  26.   TIM_BDTRInitStruct.LockLevel = LL_TIM_LOCKLEVEL_OFF;
  27.   TIM_BDTRInitStruct.DeadTime = 0;
  28.   TIM_BDTRInitStruct.BreakState = LL_TIM_BREAK_DISABLE;
  29.   TIM_BDTRInitStruct.BreakPolarity = LL_TIM_BREAK_POLARITY_HIGH;
  30.   TIM_BDTRInitStruct.BreakFilter = LL_TIM_BREAK_FILTER_FDIV1;
  31.   TIM_BDTRInitStruct.BreakAFMode = LL_TIM_BREAK_AFMODE_INPUT;
  32.   TIM_BDTRInitStruct.Break2State = LL_TIM_BREAK2_DISABLE;
  33.   TIM_BDTRInitStruct.Break2Polarity = LL_TIM_BREAK2_POLARITY_HIGH;
  34.   TIM_BDTRInitStruct.Break2Filter = LL_TIM_BREAK2_FILTER_FDIV1;
  35.   TIM_BDTRInitStruct.Break2AFMode = LL_TIM_BREAK_AFMODE_INPUT;
  36.   TIM_BDTRInitStruct.AutomaticOutput = LL_TIM_AUTOMATICOUTPUT_ENABLE;
  37.   LL_TIM_BDTR_Init(TIM1, &TIM_BDTRInitStruct);
复制代码


波形图



收藏 评论1 发布时间:2023-8-21 09:54

举报

1个回答
xmshao 回答时间:2023-8-21 11:28:35
你在现有配置下,注意 我说的是你有配置前提下,将PWM输出模式改为PWM2即可。


其实,基于单脉冲模式实现指定个数脉冲输出可以有多种配置。


另外,你提及的OCIdleState并不起作用是正常的,该配置是针对互补输出才有作用。


这里有篇文章 《STM32定时器单脉冲输出模式话题》 非常详细地针对性介绍了STM32TIMER单脉


冲模式的实现原理,并辅以事例讲解,可以阅读下。希望读完之后消除你现在内心的疑惑。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版