高级会员
- 积分
- 895
- 金钱
- 895
- 注册时间
- 2012-6-29
- 在线时间
- 37 小时
|
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%。
|