zoukankan      html  css  js  c++  java
  • STM8S103F3--PWM配置

    本文使用的芯片是是stm8s103f3。

    以下主要说明配置TIM2通道1为PWM输出的过程。

    1.寄存器配置

    clip_image004

    4位预分频器,计数器的计数频率Fck_cnt=Fck_psc/2^(PSC[3:0])=16M/2^0=16M

    那么计数周期为1/16us,也就是说计数器会每隔1/16us计数一次。

    TIM2_PSCR=0x00; //分频值=0 16M

    clip_image006

    自动重装载寄存器,

    当自动重装载寄存器=0时,计数器处于阻塞状态,也就是不计数状态,因为当CNTR=ARR时,CNTR就会清零,所以配置时自动重装载寄存器应该大于0。另外自动重装载寄存器的值就是PWM波形的周期,比如ARR=0X0100,PWM的周期为0x0100*1/16=16us,PWM的周期就是16us

      TIM2_ARRH=0x01; //自动重装的值 0x0100

      TIM2_ARRL=0x00;

    clip_image008

    捕获/比较使能寄存器,这个寄存器的配置可以选通相应的Tim2通道。

    bit5,bit4为ch2配置,bit1,bit0为ch1配置

    如果当前OC1为输出通道,则

    bit1:OC1低电平有效

    bit0:OC1信号被输出到当前引脚上

      TIM2_CCER1=bit0|bit1; //low level,OC1

    clip_image010

    clip_image012

    clip_image014

    捕获/比较模式寄存器,

    bit1,bit0

    CC1S[1:0]为捕获/比较选择

            00:CC1通道被配置为输出

    bit2保留

    bit3输出比较预加载使能

        0:不使能

        1:使能

    bit6,bit5,bit4输出比较模式

        110:PWM1模式

    PWM1和PWM2模式区别

    PWM1:CNT<CCR,CH1被激活

    PWM2:CNT>CCR,CH1被激活

    TIM2_CCMR1=bit3|bit5|bit6; //MODE

    clip_image016

    捕获/比较寄存器,这个寄存器决定着PWM的占空比。CCR/ARR=PWM的占空比,例如设置为0x0060,那么占空比为0x0060/0x0100=6/16

      TIM2_CCR1H=0x00;

      TIM2_CCR1L=0x60;

    clip_image018

    中断使能寄存器,如果需要中断可以在此设置。

    bit1:CC1E 捕获/比较1中断使能

        0:CC1 中断不使能

        1:CC1中断使能

      TIM2_IER=0x00; //更新中断使能

    clip_image020

    控制寄存器,bit0控制计数器的打开和关闭。

    bit0,计数器使能

        0:不使能

        1:使能

      TIM2_CR1=bit0; //enable counter

    通过逻辑分析仪测试PD4管脚的输出电平,波形图如下所示。

    clip_image022

    源码如下,

    //*******************************************

     1 #define bit0 0x01 
     2 #define bit1 0x02 
     3 #define bit2 0x04 
     4 #define bit3 0x08 
     5 #define bit4 0x10 
     6 #define bit5 0x20 
     7 #define bit6 0x40 
     8 #define bit7 0x80
     9 
    10   void Timer2_Init(void) 
    11   { 
    12     CLK_ICKR|=0x01;         //开启内部HSI 
    13    while(!(CLK_ICKR&0x02));//HSI准备就绪 
    14     CLK_SWR=0xe1;           //HSI为主时钟源 
    15     CLK_CKDIVR=0x00;   //HSI,8分频=16M 
    16     TIM2_PSCR=0x00;       //分频值=0 16M 
    17     TIM2_ARRH=0x01;       //自动重装的值 0x0100 
    18    TIM2_ARRL=0x00; 
    19    TIM2_CCER1=bit0|bit1; //low level,OC1
    20  
    21    TIM2_CCMR1=bit3|bit5|bit6;  //MODE 
    22   TIM2_CCR1H=0x00; 
    23    TIM2_CCR1L=0x60; 
    24    TIM2_IER=0x00;        //更新中断使能 
    25 
    26    TIM2_CR1=bit0;        //enable counter 
    27  }
    28 int main( void ) 
    29 { 
    30   Timer2_Init(); 
    31   while(1){}; 
    32 }
     
  • 相关阅读:
    SQL注入
    浅复制
    重构
    UML
    UML
    工业4.0
    MVC
    博客搬家(CSDN->博客园)
    BitCoin
    Java
  • 原文地址:https://www.cnblogs.com/zhezhe1988/p/3895811.html
Copyright © 2011-2022 走看看