STM32——TIM定时器日记之3.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32——TIM定时器日记之3.doc

1、PWM输出模式 TIM_Period配置是代表波形的周期,因此其数值一定要比输出配置中TIM_OCInitStructure.TIM_Pulse的数值大。(如TIM_Period = 0x3E7则波形频率为TIMCLK/(0x3E7+1))且只要TIM_Period 不为零,则其TIMCLK为系统频率的一半。 TIM_Prescaler是在上述基础上再分频(如TIM_TimeBaseStructure.TIM_Prescaler = 0x2,以1中配置为例,则输出波形频率变为TIMCLK/(0x3E7+1)/(0x2+1))。若此时TIM_OCInitStructure.TIM_Pulse = CCR1_Val;(例如CCR1_Val=15则占空比为:CCR1_Val/(TIM_Period+1))所以TIM_Prescaler之改变输出波形的周期,并不改变占空比。 2、TIM_OCMode_Toggle TIM输出比较触发模式 此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。即TIM_TimeBaseStructure.TIM_Period配置大小对输出波形的频率没有影响(但是TIM_Period的值一定要大于TIM_OCInitStructure.TIM_Pulse,否则还没来得及更新时间就产生中断,这样结果肯定就会错误) 例如下面程序: vu16 CCR2_Val = 0x4000; TIM_TimeBaseStructure.TIM_Period = 0xFFF5; TIM_TimeBaseStructure.TIM_Prescaler = 0x02; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); /* Output Compare Toggle Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; TIM_OCInitStructure.TIM_Channel = TIM_Channel_1; TIM_OCInitStructure.TIM_Pulse = CCR1_Val; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OCInit(TIM2, TIM_OCInitStructure); TIM2 Configuration: 输出比较模式: TIM2CLK = 36 MHz, Prescaler = 0x2, 所以TIM2 counter clock = 12 MHz CC1 update rate (更新频率)= TIM2 counter clock / CCR1_Val = 366.2 Hz 3、TIM输出比较时间模式 在这种模式下TIM的计数时钟频率为TIM2CLK/TIM_PrescalerConfig,且TIMCLK同前面一样,只要TIM_Period不为零,就是系统时钟的一半。如下例子:系统时钟72M,所以TIMCLK=36M,而TIM_PrescalerConfig配置为36000,所以TIM计数时钟频率为1000HZ。由下面CCR1_Val=250可知,第一次中断发生在0.25s后,由于中断程序中TIM_SetCompare1(TIM2, capture + CCR1_Val);将比较值设置为两倍,所以以后每次都是0.5s产生一次中断来点亮LED.同理其他三个LED每隔1s,2s,3s点亮一次。(值得注意的是中断中每次都需要更新比较值,还有就是TIM_Period的值只要不是零或小于用于比较的值,其大小不会影响结果)。 vu16 CCR1_Val = 250; vu16 CCR2_Val = 500; vu16 CCR3_Val = 1000; vu16 CCR4_Val = 1500; TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x00; T

文档评论(0)

整理王 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档