新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2015-10-25
- 在线时间
- 3 小时
|
5金钱
通过定时器T2的管脚复用功能,通过输出通道4(PB11)输出PWM波形控制LED做呼吸灯,发现对应的LED无实际的现象,原程序如下:
初始化函数:
void T2_PWM_Init(u16 prer,u16 rlr)
{
TIM_OCInitTypeDef TIM_OCInitStruct;
GPIO_InitTypeDef GPIOInitInitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_Period=prer;
TIM_TimeBaseInitStruct.TIM_Prescaler=rlr;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
GPIOInitInitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIOInitInitStruct.GPIO_Pin=GPIO_Pin_11;
GPIOInitInitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCPolarity_High;
TIM_OC4Init(TIM2,&TIM_OCInitStruct);
TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_Cmd(TIM2,ENABLE);
}
主函数:
int main(void)
{
u8 dir=1;
u16 LED3_PWM_Val=0;
SystemInit();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
printf("System START1\r\n");
delay_init();
Hal_LED_Init();
Hal_KEY_Init();
T3_Init(1);
EXIT_Init();
IDWG_Init(4,625);
T2_PWM_Init(899,0);
while (1)
{
IWDG_ReloadCounter();
if(dir==1) LED3_PWM_Val++;
else LED3_PWM_Val--;
printf("LED3_PWM_Val %d\r\n",LED3_PWM_Val);
if (LED3_PWM_Val>300) dir=0;
if (LED3_PWM_Val==0) dir=1;
TIM_SetCompare4(TIM2,LED3_PWM_Val);
delay_ms(10);
}
}
来个大神帮忙解决下
|
|