搜档网
当前位置:搜档网 › 风驰电子stm8s开发板PWM资料

风驰电子stm8s开发板PWM资料

例程九定时器TIM2

定时器的使用是很重要的,可以说是单片机的灵魂来的,它的功能非常强大,单片机可以利用它来做很多事情。这个例程主要解析一下STM8S里面定时器TIM2的主要功能特点。TIM2是个通用定时器,和TIM3是一样的。

计数模式

计数模式就介绍一种向上技术模式,其他模式可以参考STM8寄存器.pdf文档第115页至118页

通道输出的具体的原理可以参考STM8寄存器.pdf文档第133页至138页

了解通用定时器TIM2,现在关键是学会怎么去用,怎样去设置定时器的寄存器。 好的,跟以前一样从主函数看起

看过这主函数,是否觉得这和前面的例程写得有点不一样呢?是的,这个TIM2的功能强大,功能比较多,在我的例程中,我写了几个常用和比较重要的功能,所以才有了预定义的方法,这种形式对调试程序比较重要,呆会在详细解释。这种#if …#endif 或#if…#elif…#endif。这就预定义,只有后面为真,编译器才会编译那些代码,否则就不会编译。大家学过C语言的都是知道这种编程方法,

希望大家能领会这种方法。下面还是主要看看的我们STM8S的TIM2的各个功能的初始话。在这个例程中,介绍了定时器的基本定时,主要利用基本定时来实现最精准的1ms的延迟函数和TIM2的PWM的功能。

这个就是初始化,如果是TIM2_Mode==BaseTime的话就是利用TIM2的定时器功能。看看里面的初始化吧。

这个初始化函数定义了TIM2的计数频率为主时钟的16分频,就是1M,当从0计数到999就是1ms,但计数到999是马上又自动重装系数,又从0开始计数,当计数到999,会产生一个中断。

__enable_interrupt();这个就是开总中断

其他的2个初始化就LED的初始化,前面已经讲过了,这里就不再重复了。

下面看看中断服务子程序

这个TIM2计数溢出中断的中断号为0xF,里面的函数是放中断后要处理的语句,最后要清楚标志位,TIM2_ClearITPendingBit(TIM2_IT_UPDATE);否则就跳不出中断。这里主要是实现1ms的延迟函数,所以只调用了TimingDelay_Decrement();这个函数。看看它的函数原型

就是每近一次中断TimingDelay就减1,TimingDelay定义为静态全局变量,这样的话就可以实现1ms精准延迟。下面看看延迟函数的原型

整个延迟思想是TimingDelay不等于0的话,就在这等到TimingDelay为0,TimingDelay减1是进去中断子程序,TimingDelay是全局静态变量。这个功能使用流水灯LED来演示,所以大家在主函数的文件头部那里这样定义就行

这个就是表示当你编译的时候只编译定时

器这个功能的代码。编译后下载到风驰电子STM8开发板的时候就会见到LED不断的流,每隔100ms。

下面接着写TIM2 的PWM功能

这个初始化函数定义了3个通道的初始化,初始化里面最重要的是设置了PWM 的频率和占空比,对于怎么设,大家看上面的例程代码和注释就清楚了。在官方库里面没有单独对PWM设置频率和占空比,所以我就封装了2个这样的函数,大家来看看。

大家看到这个函数是否和官方库封装的很相似呢?这是个很标准的函数,其实大家要培养成良好的编程习惯,这样让人感觉你的编程是很规范的。这个函数是实现PWM的频率的设置。频率的设置还要跟时钟有关系。

TIM2 Frequency = TIM2 counter clock/(ARR + 1)= TIM2 counter clock/(TIM2_Period+ 1)。

这个函数设置了3个通道的占空比,这个函数也是用预定义来实现了,至于大家要用哪个通道的就在pwm.h的头文件里面改下宏定义

TIM2 Channel duty cycle = [TIM2_CCRx/(TIM2_ARR + 1)]= [TIM2_Period/(TIM2_ARR + 1)] 所以先设好频率,才能设置占空比。

TIM2的通道1在风驰电子STM8开发板链接到音频的输入端,可以实现不同频率的音频信号输出,TIM2的通道2在风驰电子STM8开发板链接到LED,可以利用不同的占空比实现LED的不同的亮度。

当按照上面的宏定义的话就是实现了蜂鸣器按照不同频率发出声音。注意,还要把TIM2_CH1通道还原为TIM2_CH1,因为这个管脚是复用功能的,默认是TIM2_CH1通道的,但是如果下载过前面的Beep的程序的话,就把它改为了Beep 的功能了,所以要把它还原。

Set_Beep_OptionByte();

这样的话,把程序下载到风驰STM8开发板就可以听到不同的频率的声音了。

当是这样设置的话,就是实现PWM不同的占空比,对应的是LED的亮度不同的变化。

风驰电子祝您学习愉快~~~!!!!!

相关主题