为什么我main函数先配置PWM_Configuration();再配置GPIO_Configuration();的话,就只有PB0不能输出PWM波。而先配置GPIO_Configuration();再配置PWM_Configuration();的话,PB0,PA8,PA9,PA10都不能输出PWM波了。想问下有没有哪位高手知道其中缘由
主函数:
[mw_shl_code=c,true]#include "pbdata.h"
int main()
{
RCC_Configuration();
PWM_Configuration();
GPIO_Configuration();
OLED_Init();
while(1)
{
}
}[/mw_shl_code]
时钟和GPIO配置:
[mw_shl_code=c,true]#include"pbdata.h"
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1 | RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //12M adc不能大于14M
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//OLED的IO口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//CCD的IO口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PWM的IO口配置
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
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_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6|
GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//禁止JTAG,保留SW
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
}
[/mw_shl_code]
PWM配置:
[mw_shl_code=c,true]#include"PWM.h"
u16 a,b,zt1,zt2,zt3,zt4,zt5,yt1,yt2,yt3,yt4,yt5,zs1,zs2,tou,ys1,ys2;
void PWM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; //定时器结构体
TIM_OCInitTypeDef Tim_OCInitStructure;//PWM结构体
//GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE); //端口映射
//TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除定时器
//定时器设置 PWM(35-260)
TIM_TimeBaseStruct.TIM_Period=1999; // 初值
TIM_TimeBaseStruct.TIM_Prescaler=719; //预分频
TIM_TimeBaseStruct.TIM_ClockDivision=0;
TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up; //向上模式
TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStruct);
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_TimeBaseStruct.TIM_Period=1999; // 初值
TIM_TimeBaseStruct.TIM_Prescaler=719; //预分频
TIM_TimeBaseStruct.TIM_ClockDivision=0;
TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up; //向上模式
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStruct);
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStruct);
//PWM设置 Tout=((Period+1)*(Prescaler+1))/Tim 若Prescaler不为1则Tim应乘以2
Tim_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式
Tim_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //PWM极性
Tim_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //PWM使能
Tim_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;
//TIM2全部通道输出
TIM_OC1Init(TIM2,&Tim_OCInitStructure);
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC2Init(TIM2,&Tim_OCInitStructure);
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC3Init(TIM2,&Tim_OCInitStructure);
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC4Init(TIM2,&Tim_OCInitStructure);
TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);
//TIM3全部通道输出
TIM_OC1Init(TIM3,&Tim_OCInitStructure);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC2Init(TIM3,&Tim_OCInitStructure);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC3Init(TIM3,&Tim_OCInitStructure);
TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC4Init(TIM3,&Tim_OCInitStructure);
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
//TIM4全部通道输出
TIM_OC1Init(TIM4,&Tim_OCInitStructure);
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC2Init(TIM4,&Tim_OCInitStructure);
TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC3Init(TIM4,&Tim_OCInitStructure);
TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC4Init(TIM4,&Tim_OCInitStructure);
TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);
Tim_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式
Tim_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //PWM极性
Tim_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //PWM使能
Tim_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Disable;
//Tim_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
//TIM1全部通道输出
TIM_OC1Init(TIM1,&Tim_OCInitStructure);
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OC2Init(TIM1,&Tim_OCInitStructure);
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OC3Init(TIM1,&Tim_OCInitStructure);
TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OC4Init(TIM1,&Tim_OCInitStructure);
TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_Cmd(TIM1,ENABLE);
TIM_Cmd(TIM2,ENABLE);
TIM_Cmd(TIM3,ENABLE);
TIM_Cmd(TIM4,ENABLE);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
[/mw_shl_code]
|