高中生
最后登录1970-1-1
在线时间 小时
注册时间2019-1-10
|
问题是这样的:我需要用到摄像头、LCD显示和pwm输出。在main()中依次初始化PWM、LCD和摄像头后,LCD没有显示摄像头采集到的图像,也就是白屏。我把pwm_tim.c中PWM_TIM_GPIO_Config()函数中的引脚重映射GPIO_PinRemapConfig()注释掉,LCD就可以显示图像了。所以我怀疑是引脚重映射导致引脚重叠,于是我查了一下我使用的是TIM3的完全重映射,重映射后引脚为PC6/7/8/9。其中PC6/7为OV7725使用的引脚。但我在PWM_TIM_Config()中只使用了PC8/9,并没有用到PC6/7。我对重映射的机制并不是十分了解,所以想如果我使用其他重映射,重映射后的引脚跟OV7725引脚没有重叠,应该就没有问题了吧。于是我使用了TIM3的部分重映射功能,重映射后的引脚为PB4/5/0/1。没有一个引脚跟OV7725或者LCD有关。我使用了PB4/5,也就是TIM3的通道1和通道2,但是烧写代码后LCD仍然没有显示。这就让我很疑惑。想请教一下坛友们,谁能帮我解答这个问题?
***********************LCD和OV7725的代码*************************
野火例程,没有修改过
*****************这是pwm_tim.c的代码***********************
[mw_shl_code=c,true]void PWM_TIM_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStruct;
PWM_TIM_GPIO_CLKCMD(PWM_TIM_GPIO_CLK, ENABLE);
GPIO_PinRemapConfig(PWM_TIM_GPIO_REMAP, ENABLE);//就是这一句!!!!!!!!!!!PWM_TIM_GPIO_REMAP是我定义的宏,具体是GPIO_FullRemap_TIM3。
GPIO_InitStruct.GPIO_Pin = PWM1_TIM_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //Q: does this configuration affect transmitting rate?
GPIO_Init(PWM1_TIM_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = PWM2_TIM_GPIO_PIN;
GPIO_Init(PWM2_TIM_GPIO_PORT, &GPIO_InitStruct);
}
void PWM_TIM_Config()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
PWM_TIM_CLKCMD(PWM_TIM_CLK, ENABLE);
TIM_TimeBaseStruct.TIM_Period = 1000000 / pwm_fre - 1;
TIM_TimeBaseStruct.TIM_Prescaler = PWM_TIM_PRESCALER;
TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(PWM_TIM_TYPE, &TIM_TimeBaseStruct);
TIM_ClearFlag(PWM_TIM_TYPE, TIM_FLAG_Update);
TIM_ITConfig(PWM_TIM_TYPE,TIM_IT_Update,ENABLE);
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; // select PWM mode as PWM1
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //high level valid
// TIM_OCInitStruct.TIM_Pulse = 10000 * pwm1_duty / pwm_fre;
// TIM_OC1Init(PWM_TIM_TYPE, &TIM_OCInitStruct);
// TIM_OC1PreloadConfig(PWM_TIM_TYPE, TIM_OCPreload_Enable);
// TIM_OCInitStruct.TIM_Pulse = 10000 * pwm2_duty / pwm_fre;
// TIM_OC2Init(PWM_TIM_TYPE, &TIM_OCInitStruct);
// TIM_OC2PreloadConfig(PWM_TIM_TYPE, TIM_OCPreload_Enable);
TIM_OCInitStruct.TIM_Pulse = 10000 * pwm1_duty / pwm_fre;
TIM_OC3Init(PWM_TIM_TYPE, &TIM_OCInitStruct);//!!!!!!!!!!!!这里我用的是通道3和4,也就是PC8/9
TIM_OC3PreloadConfig(PWM_TIM_TYPE, TIM_OCPreload_Enable);
TIM_OCInitStruct.TIM_Pulse = 10000 * pwm2_duty / pwm_fre;
TIM_OC4Init(PWM_TIM_TYPE, &TIM_OCInitStruct);
TIM_OC4PreloadConfig(PWM_TIM_TYPE, TIM_OCPreload_Enable);
TIM_Cmd(PWM_TIM_TYPE, ENABLE);
}
[/mw_shl_code]
|
|