OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5121|回复: 3

stm8s 定时器输出多路PWM方波

[复制链接]

153

主题

262

帖子

0

精华

高级会员

Rank: 4

积分
894
金钱
894
注册时间
2012-6-29
在线时间
37 小时
发表于 2016-3-25 13:58:00 | 显示全部楼层 |阅读模式
1金钱
在用定时器TIM2的通道1通道2输出方波的时候,发现两个通道输出的波形占空比是一样,TIM3的两个通道也是一样,求高手指教,我想要输出不同的占空比。

#include <stdarg.h>
#include <stdio.h>
#include "stm8s.h"
#include "stm8s_clk.h"
#include "stm8s_uart2.h"
#include "stm8s_gpio.h"
#include "stm8s_tim2.h"
#include "stm8s_tim1.h"
#include "stm8s_tim3.h"

u8 RxBuffer[8]={0};
u8 RxBuffer_G[8]={0};
u8  RX_NUM=0;
void Uart2_Init(void);
void IO_Init(void);
void PWM_Init(void);
void delay(u16 i);
u16 THRO,AILE,ELEV,RUDD;
u8 flag=0;
u8 flag_g=0;
int main(void)
{

  /*设置内部高速时钟16M为主时钟*/
   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
   PWM_Init();
   GPIO_WriteLow(GPIOE, GPIO_PIN_6);
   GPIO_WriteLow(GPIOE, GPIO_PIN_7);

   while(1)
   {

     RxBuffer[1]=0x01;
     RxBuffer[2]=0x00;
     RxBuffer[3]=0x00;
     RxBuffer[4]=0x00;     
   THRO=1000+RxBuffer[1]*4;  //改变数值
   AILE=1000+RxBuffer[1]*4;
   ELEV=1000+RxBuffer[3]*4;
   RUDD=1000+RxBuffer[3]*4;
   TIM2_SetCompare1(THRO);   //输出不同的占空比
   TIM3_SetCompare1(ELEV);
   TIM2_SetCompare2(AILE);
   TIM3_SetCompare2(RUDD);
   delay(0xffff);
   delay(0xffff);
   delay(0xffff);
   delay(0xffff);
   delay(0xffff);


   }

}

void delay(u16 i)
{
      for(;i>0;i--);
}

void PWM_Init(void)
{
  TIM2_TimeBaseInit(TIM2_PRESCALER_16, 20000);
  //THRO
  TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 2000,  TIM2_OCPOLARITY_HIGH);  //PWM1模式
  TIM2_OC1PreloadConfig(ENABLE);
  //AILE
  TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 2000, TIM2_OCPOLARITY_HIGH);    //PWM1模式
  TIM2_OC2PreloadConfig(ENABLE);

  TIM2_Cmd(ENABLE);

  TIM3_TimeBaseInit(TIM3_PRESCALER_16, 20000);
//  ELEV
  TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, 2000, TIM3_OCPOLARITY_HIGH); //PWM1模式
  TIM3_OC1PreloadConfig(ENABLE);
  // RUDD
  TIM3_OC2Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, 2000, TIM3_OCPOLARITY_HIGH);  //PWM1模式
  TIM3_OC2PreloadConfig(ENABLE);

  TIM3_Cmd(ENABLE);

}






最佳答案

查看完整内容[请看2#楼]

你都已经自己写出来的还说占空比一样。 TIM3_TimeBaseInit(TIM3_PRESCALER_16, 20000); 20000是PWM周期 TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, 2000, TIM3_OCPOLARITY_HIGH);2000就是PWM的占空比设定,你设2000,那么占空比就是2000/20000*100%=10%,如果你设4000那么占空比就是20%。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
31
金钱
31
注册时间
2015-8-25
在线时间
0 小时
发表于 2016-3-25 13:58:01 | 显示全部楼层
你都已经自己写出来的还说占空比一样。
TIM3_TimeBaseInit(TIM3_PRESCALER_16, 20000); 20000是PWM周期


TIM3_OC1Init(TIM3_OCMODE_PWM1, TIM3_OUTPUTSTATE_ENABLE, 2000, TIM3_OCPOLARITY_HIGH);2000就是PWM的占空比设定,你设2000,那么占空比就是2000/20000*100%=10%,如果你设4000那么占空比就是20%。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2016-3-26 13:03:46 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-12-22
在线时间
17 小时
发表于 2016-5-10 09:42:56 | 显示全部楼层
mark,字数是个问题!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-9-29 04:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表