单片机学习小组
直播中

北冥有熊

8年用户 864经验值
擅长:131594
私信 关注

怎样使用STM8S003的PWM功能输出PWM波呢

怎么去修改stm8s系列单片机的头文件呢?

怎样使用STM8S003的PWM功能输出PWM波呢?

回帖(2)

周静

2022-2-17 10:58:06
1
举报

胡红枚

2022-2-17 11:00:24
在使用 PWM TIM2 CH1、CH3 修改

1. 在使用stm8s系列的单片机的时候,使用的头文件大部分都是通用的stm8s.,第一步修改头文件:
/* Uncomment the line below according to the target STM8S or STM8A device used in your
   application. */
/* #define STM8S208 */      /*!< STM8S High density devices with CAN */
/* #define STM8S207  */    /*!< STM8S High density devices without CAN */
/* #define STM8AF52Ax */    /*!< STM8A High density devices with CAN */
/* #define STM8AF62Ax */    /*!< STM8A High density devices without CAN */
/* #define STM8S105 */      /*!< STM8S Medium density devices */
/* #define STM8AF626x */    /*!< STM8A Medium density devices */
  #define STM8S103       /*!< STM8S Low density devices */
/* #define STM8S903 */      /*!< STM8S Low density devices */
2. 取消stm8s103的注释,103和003的寄存器地址都是一样的,所以我们这里用103替代003.
3. 引脚使用PWM功能时无需配置GPIO状态,直接配置寄存器即可。例如TIM2的库函数配置如下:
    TIM2_TimeBaseInit(TIM2_PRESCALER_1, 7999);         /*    1分频 ,计数值8000,频率=16M/8000=2kHZ   */
    /* PWM1 Mode configuration: Channel1 */
    TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%*/
    TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
    TIM2_OC1PreloadConfig(ENABLE);
    /* PWM2 Mode configuration: Channel2 */
    TIM2_OC2Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
    TIM2_OC2PreloadConfig(ENABLE);
     /* PWM3 Mode configuration: Channel3*/
    TIM2_OC3Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
    TIM2_OC3PreloadConfig(ENABLE);
    TIM2_Cmd(ENABLE);
4.  配置完成后,调试输出2kHz 占空比为25%的PWM波,如下图所示:








2. TIM1三通道输出PWM电话实例:
  CLK->CKDIVR= 0x00; //内部16M时钟不分频
  TIM2->PSCR = 0x00; // T预分频系数为
  1IM2->CR1 = 0x01; //实测能;
  TIM2->ARRH = 0频0分00K,16M/320=5x00K,49.7K
  TIM2->ARRL = 0x8a;//实测自动位;通道0013e为0.0K
  /*PWM1*/
  TIM2->CCER1 |= 0x01; //开启OC1信号输出脚
  TIM2->CCMR1 = 0x60; //PWM1模式
  TIM2->CCR1H = 0x00; //占空比
  高位TIM2->CCR1L = 0x37; //占空比低位
  TIM2->CCMR1 |= 0x08; //输出比较预加载能力
  /*PWM2通道设置*/
  TIM2->CCER1 | 0x10; //开启OC2信号输出脚
  TIM2->CCMR2 = 0x60; //PWM1模式
  TIM2->CCR2H = 0x00; //占空比
  高位 TIM2->CCR2L = 0x37; //占空比低位
  TIM2->CCMR2 |= 0x08; //输出比较2预充电能力
  /*PWM通道设置*/
  TIM2->CCER2 | 0x01;
  TIM2->CCMR3 = 0x60;//PWM1模式
  TIM2->CCR3H = 0x00; //占空比
  高位TIM2->CCR3L = 0x37; //占空比低位
  TIM2->CCMR3 |= 0x08; //输出比较3预装使能
  TIM2->CR1 |= 0x01;
1 举报

更多回帖

发帖
×
20
完善资料,
赚取积分