初级会员

- 积分
- 73
- 金钱
- 73
- 注册时间
- 2016-4-21
- 在线时间
- 23 小时
|
1金钱
希望大神可以帮忙看看哪里有问题,自己看半天了,也搜过类似问题的,试过了也不好使
int main(void)
{
u8 led_fx; //定义的变量名称led_fx(方向)
u16 led_dt; //随意定义的变量名称
RCC_Configuration(); //系统时钟初始化
GPIO_Configuration();//端口初始化
TIM3_Configuration();//定时器和PWM初始化
while(1)
{
//每10ms改变一次CCRx的值,太快肉眼看不出效果
for(led_fx=3000;led_fx>=0;led_fx--)//=1为从左到右
{
if(1500<led_dt<300)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
delay_ms(10);
if(2700<led_fx<3000)
led_dt=100; //不断增加,在ppt图中表示高电平所占时间增加
else if(2400<led_fx<2700)
led_dt=200;
else if(2100<led_fx<2400)
led_dt=300;
else if(1800<led_fx<2100)
led_dt=200;
else if(1500<led_fx<1800)
led_dt=100;
else
{
}
}
else
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOB,GPIO_Pin_4);
delay_ms(10);
if(1200<led_fx<1500)
led_dt=100;
else if(900<led_fx<1200)
led_dt=200;
else if(600<led_fx<900)
led_dt=300;
else if(300<led_fx<600)
led_dt=200;
else if(0<led_fx<300)
led_dt=100;
else
{
}
}
}
TIM_SetCompare2(TIM3,led_dt);//把变量的值送到PWM的CCRx里去,因为是通道2,定时器3
TIM_SetCompare1(TIM3,led_dt);
}
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
//LED初始化
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void TIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); //端口映射,在中文手册119页,看到用通道2的部分映射可以是输出在PB5端口
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//加上了这一句,禁用JTAG,我用的是JTAG下载
//定时器初始化
TIM_TimeBaseStruct.TIM_Period = 899; //初值,等于72000000/36000=2000
TIM_TimeBaseStruct.TIM_Prescaler = 0; //预分频。注意,此步会把你输入的数字加1,所以如果需要10,就输入9
TIM_TimeBaseStruct.TIM_ClockDivision = 0;
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
//PWM初始化
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能位,不然比较完不输出
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//使用Low因为看LED原理图,一边接的3.3V,所以要用low
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能在CCR上的预装载寄存器,不然执行一次后可能停止
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能位,不然比较完不输出
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OC1Init(TIM3,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_Cmd(TIM3,ENABLE); //打开外设
}
@正点原子
|
|