本节是介绍如何使用CubeMX配置STM32的通用定时器TIM2,实现PWM输出,并通过Keil观察波形。

    关键词:通用定时器TIM2 PWM Keil虚拟示波器

    开发环境:CubeMX+MDK5.27
    芯片型号:STM32F103ZET6
    时间:2020/07/14

    简介:在定时器的第一节,我们介绍到通用定时器的功能有:定时、输出比较、输入捕获。本节我们使用其输出比较功能中的PWM输出模式,输出一个PWM波。
    PWM波:又称方波,其波形图如图所示
    PWM.png
    3.3V对应的刻度我们把它称为高电平,而0V对应的刻度就是低电平。那么方波的一个周期就是图中Ton的长度加上Toff的长度,PWM的周期我们又称为脉冲宽度,高电平维持时间与总周期时间的比值我们称为占空比(Duty)。很明显图中高电平维持时间和低电平维持时间是相同的,那么占空比就是50%

    了解了PWM波之后,我们再来了解通用定时器TIM2的输出比较功能,首先我们来看输出比较初始化的结构体
    OC.png
    这个结构体中有7个成员变量,但与PWM功能相关的有四个,分别是OCMode、Pulse、OCPolarity、OCFastMode
    OCmode.png
    这里是OCMode所有的取值类型,我们只需要两种PWM模式,其他的用的不多,可在需要时再研究。
    TIM_OCMODE_PWM1代表PWM模式1,在该模式下,进行递增计数时,当TIM_CNTTIM_OCMODE_PWM2代表PWM模式2,在该模式下,进行递增计数时,当TIM_CNT注:TIM_CNT为计数器的当前计数值,而TIM_CCR为比较寄存器的值简称比较值。比较值在初始化时会通过上面结构体的Pulse变量完成赋值,即比较值是设定好的参数,无法在输出PWM波时进行改变。
    结构体中的OC_Polartiry代表着有效电平的极性,当其取TIM_OCPOLARITY_HIGH则表示输出有效电平为高电平
    当其取TIM_OCPOLARITY_LOW则表示输出有效电平为低电平。
    结构体中的OCFastMode代表着快速输出模式,这个保持默认配置即可,默认是不开启快速输出模式的。

    实现步骤
    第一步,CubeMX配置定时器2,使用PWM模式1,计数模式为增计数模式,有效电平为高电平,即当计数值<比较值,输出高电平,计数器>比较值,输出低电平。假定输出PWM波的频率为1KHZ,占空比50%.根据上一节总结的公式,T=(prescaler + 1) * (counter period + 1) / TIM_Clock = 1ms = 1/1000s
    因此我们取prescaler=72-1 counter period = 1000-1,即T=72*1000/72000000=1/1000s
    知道了脉冲宽度,我们就根据占空比,反向计算出比较值,TIM_CRR = 50% * counter period = 500
    具体配置如图
    PPP.png
    配置完后,查看Pinout View可以看到PA15引脚变成了绿色,且Label编程了TIM2_CH1,这表示PA15引脚对应着定时器2的通道1,最终PWM波也是通过该引脚输出。如果你选择的是别的通道,那么就是通道对应的引脚输出PWM波。

    第二步,编写代码,非常简单只需要在main.c的USER CODE BEGIN 2下添加以下代码**

    1. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);//启动定时器2

    第三步、使用Keil的虚拟示波器观察PA15引脚输出的PWM波
    点击魔术棒,将debug选项进行修改
    debug.png
    勾选Use Simulator选项表示使用仿真器。注:左下角的两个参数Dialog DLL和Parameter也要修改,如图
    ppp.png
    Parameter参数里要修改为自己开发板对应的型号,Dialog.DLL要改成DARMSTM.DLL才能正常使用。
    接下来点击调试按钮,如图所示
    debug.png
    这个像放大镜一样的图标就是调试按钮,点击它可以进入调试界面,再点击就推出调试界面,调试界面如图
    debug.png
    找到Logic Analyzer选项并点击它,如图所示
    log.png
    打开Logic Analyzer后如图所示,点击Logic Analyzer窗口左上角的setup
    log.png
    点击setup,会出现如图所示的窗口
    set.png
    点击箭头所指的按钮,就可以在框中输入要观察的引脚,例如本节通过PA15输出PWM波,因此我们输入PORTA.15然后回车即可,接着鼠标选中刚刚添加的待分析信号,此时下方灰色的选项就可以更改了。如图
    set.png
    更改Display Type为Bit,Color我选择红色,便于观察。配置完成后,点击Close,可以发现Logic Analyzer窗口左侧多了刚刚我们添加的引脚,如图
    log.png
    接着我们点击全速运行按钮,就可以观察到波形了!如图
    QS.png
    wave.png
    如果波形变化较快,可以点击红色的Stop按钮,观察静止的波形,更多功能在此就不详细介绍,可以自行摸索!