#include "main.h" u16 CCR1_Val = 10000; u16 CCR2_Val = 1000; u16 CCR3_Val = 100; u16 CCR4_Val = 10; void TIM2_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //TIM2 RCC RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_TimeBaseStructure.TIM_Prescaler = 71;//分频71, //72M/(719+1)/2=0.1MHz ,1uS中断溢出一次 TIM_TimeBaseStructure.TIM_Period = 65535;//计数值10000 //((1+TIM_Prescaler )/72M)*(1+TIM_Period)=((1+719)/72M)*(1+50000)=500ms*/ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //TIM_PrescalerConfig(TIM2,7199,TIM_PSCReloadMode_Immediate); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_Pulse = CCR1_Val; TIM_OC1Init(TIM2,&TIM_OCInitStructure); TIM_OCInitStructure.TIM_Pulse = CCR2_Val; TIM_OC2Init(TIM2,&TIM_OCInitStructure); TIM_OCInitStructure.TIM_Pulse = CCR3_Val; TIM_OC3Init(TIM2,&TIM_OCInitStructure); TIM_OCInitStructure.TIM_Pulse = CCR4_Val; TIM_OC4Init(TIM2,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable); TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable); TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable); TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable); TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE); TIM_Cmd(TIM2,ENABLE); } void TIM2_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0); #else NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); #endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void LED_GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA , &GPIO_InitStructure); } void RCC_Configuration(void) { /* 定义枚举类型变量 HSEStartUpStatus */ ErrorStatus HSEStartUpStatus; /* 复位系统时钟设置*/ RCC_DeInit(); /* 开启HSE*/ RCC_HSEConfig(RCC_HSE_ON); /* 等待HSE起振并稳定*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* 判断HSE起是否振成功,是则进入if()内部 */ if(HSEStartUpStatus == SUCCESS) { /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */ RCC_PCLK2Config(RCC_HCLK_Div1); /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* 设置FLASH延时周期数为2 */ FLASH_SetLatency(FLASH_Latency_2); /* 使能FLASH预取缓存 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* 使能PLL */ RCC_PLLCmd(ENABLE); /* 等待PLL输出稳定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* 选择SYSCLK时钟源为PLL */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 等待PLL成为SYSCLK时钟源 */ while(RCC_GetSYSCLKSource() != 0x08); } } /* #include "stm32f10x_it.h" extern vu16 CCR1_Val; extern vu16 CCR2_Val; extern vu16 CCR3_Val; extern vu16 CCR4_Val; void TIM2_IRQHandler(void) { vu16 capture=0; if(TIM_GetITStatus(TIM2,TIM_IT_CC1) != RESET) { GPIO_WriteBit(GPIOA , GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_4))); capture = TIM_GetCapture1(TIM2); TIM_SetCompare1(TIM2,capture + CCR1_Val); TIM_ClearITPendingBit(TIM2,TIM_IT_CC1); } else if(TIM_GetITStatus(TIM2,TIM_IT_CC2) != RESET) { GPIO_WriteBit(GPIOA , GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5))); capture = TIM_GetCapture2(TIM2); TIM_SetCompare2(TIM2,capture + CCR2_Val); TIM_ClearITPendingBit(TIM2,TIM_IT_CC2); } else if(TIM_GetITStatus(TIM2,TIM_IT_CC3) != RESET) { GPIO_WriteBit(GPIOA , GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_6))); capture = TIM_GetCapture3(TIM2); TIM_SetCompare3(TIM2,capture + CCR3_Val); TIM_ClearITPendingBit(TIM2,TIM_IT_CC3); } else { GPIO_WriteBit(GPIOA , GPIO_Pin_7,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_7))); capture = TIM_GetCapture4(TIM2); TIM_SetCompare4(TIM2,capture + CCR4_Val); TIM_ClearITPendingBit(TIM2,TIM_IT_CC4); } } */