文档详情

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

发布:2017-08-14约4.45千字共4页下载文档
文本预览下载声明
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
显示全部
相似文档