三、成员分析完毕,还有两个比较重要的初始化配置函数 [csharp] view plain copy
print?
- TIM_OC1Init(TIM3, &TIM_OCInitStructure); //使能通道1
- TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
第一个函数自然是使能通道了,具体来看看函数定义吧!有兴趣的可以跟踪进去瞅瞅
第二个函数就是Enables or disables the TIMx peripheral Preload register on CCR1使能预装在寄存器! TIM_OC1Init(TIM3, &TIM_OCInitStructure);你使用sourceinsight工具,进行代码跟踪的话,就能知道句话的作用就是: 开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1的预装载值在更新事件到来时被加载至当前寄存器中。我的理解是:也就是当我们计数溢出的时候
才更新我们的预装值!有两个要注意点的地方 注1 :一旦LOCK 级别设为3(TIMx_BDTR寄存器中的LOCK 位) 并且CC1S=00( 该通道配置成输
出)则该位不能被修改。
注2:仅在单脉冲模式下(TIMx_CR1寄存器的OPM=1),可以在未确认预装载寄存器情况下使用
PWM模式,否则其动作不确定。
如果还想继续深入研究的话建议参考那本datasheet吧!不深入讨论了! 软件仿真效果图如下! 手上有示波器,但是一下难以观察到4个通道,所以就懒得演示了,管脚引出来接到对应的LED上面,也能看到亮度不同!至此 PWM基本知识就学到这里! 还有最后两个函数没解释的! TIM_OC1PreloadConfig(),TIM_ARRPreloadConfig();这两个函数控制的是ccr1和arr的预装在使能,使能和失能的区别就是:使能的时候这两个局存期的读写需要等待有更新事件发生时才能被改变(比如计数溢出就是更新时间)。失能的时候可以直接进行读写而没有延迟。
|