void TIM_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 使能GPIO时钟 */ RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE); RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB,ENABLE); /* 配置GPIO管脚复用*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_7 | GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // 复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出模式 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; //上拉 GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_0 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // 复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出模式 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; //上拉 GPIO_Init(GPIOB, &GPIO_InitStructure); //PA10-PB1 PA9-PB0 PA8-PA7 //GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_0); //CLOCK OUTPUT GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_2); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_2); GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_2); GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_2); GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_2); //RCC->CFGR |= RCC_CFGR_MCO_HSE; //RCC_MCOConfig(0x06); //mco output HSE }
void TIM_PWM_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; TimerPeriod = ((SystemCoreClock / 17570 ) - 1)/2; /* TIM1 时钟使能 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE); /* Time 定时基础设置*/ TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频器参数 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; /* Time 定时设置为上升沿计算模式*/ TIM_TimeBaseStructure.TIM_Period = TimerPeriod; //周期 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分频 TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //计数周期 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; TIM_BDTRInitStructure.TIM_DeadTime = 75; //死区时间 TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); //TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_OC1Ref); TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_UP_TRG_COM_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_CtrlPWMOutputs(TIM1, ENABLE); TIM_Cmd(TIM1, ENABLE); }
void TIM1_BRK_UP_TRG_COM_IRQHandler(void) { //led_trans(); if((TIM1->CNT & 0xff00) != 0) { //LED_Close(); //LED_Open(); LED_Close(); ADC_StartOfConversion(ADC1); while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET); LED_Open(); adc_data=ADC_GetConversionValue(ADC1); } else { pwmclg = 1; } TIM_ClearITPendingBit(TIM1,TIM_IT_Update); }