#include "stm32f4xx.h" #include "stm32f4xx_conf.h" uint32_t msCnt; void SysTick_Handler(void) { msCnt + + ; } void delayms(uint32_t t) { uint32_t i,j; i = j = msCnt; while((j - i) < t)j = msCnt; } static unsigned char LEDSEG[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; static unsigned char LEDDIG[] = {0x0E,0x0D,0x0B,0x07}; // static unsigned char LEDBuffer[4] = {0,0,0,0}; //?§o? static unsigned char LEDIndex=0; static unsigned char LED_min1=0; static unsigned char LED_min2=0; static unsigned char LED_s1=0; static unsigned char LED_s2=0; /****************êy1üGPIOê1?üoˉêy************/ void LEDPin_Init(void) { GPIO_InitTypeDef MyGPIO; //GPIOE0-12ê1?ü RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); MyGPIO.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; MyGPIO.GPIO_Mode = GPIO_Mode_OUT; //ê?3£ê? MyGPIO.GPIO_OType = GPIO_OType_PP; //í?íìê?3? MyGPIO.GPIO_PuPd = GPIO_PuPd_NOPULL; //2?é?à-2?à- MyGPIO.GPIO_Speed = GPIO_Speed_2MHz; //2MHZ?ù?ê \t GPIO_Init(GPIOE, &MyGPIO); } /************GPIOA93?êˉoˉêy************/ void LEDFANZHUAN_Init(void) { GPIO_InitTypeDef MyGPIO; \t RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); MyGPIO.GPIO_Pin = GPIO_Pin_9; MyGPIO.GPIO_Mode = GPIO_Mode_OUT; MyGPIO.GPIO_OType = GPIO_OType_PP; MyGPIO.GPIO_PuPd = GPIO_PuPd_UP; MyGPIO.GPIO_Speed = GPIO_Speed_2MHz; \t GPIO_Init(GPIOA, &MyGPIO); } /****************°′?üGPIO3?êˉoˉêy************/ void AJ_Init(void) { GPIO_InitTypeDef MyGPIO; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); MyGPIO.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_5; MyGPIO.GPIO_Speed = GPIO_Speed_2MHz; MyGPIO.GPIO_PuPd = GPIO_PuPd_UP; MyGPIO.GPIO_Mode = GPIO_Mode_IN; GPIO_Init(GPIOA, &MyGPIO); } /****************°′?ü?D3?êˉoˉêy************/ void Key_EXTI_Init(void) { EXTI_InitTypeDef MyEXTI; \t RCC_APB2PeriphClockCmd(RCC_APB2ENR_SYSCFGEN,ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD,EXTI_PinSource1); \t MyEXTI.EXTI_Line = EXTI_Line1; //EXTI1 MyEXTI.EXTI_Mode = EXTI_Mode_Interrupt; MyEXTI.EXTI_Trigger = EXTI_Trigger_Falling; //?μ′¥·¢ MyEXTI.EXTI_LineCmd = ENABLE; EXTI_Init( &MyEXTI); } void Key1_EXTI_Init(void) { EXTI_InitTypeDef MyEXTI; \t RCC_APB2PeriphClockCmd(RCC_APB2ENR_SYSCFGEN,ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD,EXTI_PinSource5); \t MyEXTI.EXTI_Line = EXTI_Line5; MyEXTI.EXTI_Mode = EXTI_Mode_Interrupt; MyEXTI.EXTI_Trigger = EXTI_Trigger_Falling; MyEXTI.EXTI_LineCmd = ENABLE; EXTI_Init( &MyEXTI); } /******************°′?üNVICóè3?êˉ****************/ void Key_NVIC_Init(void) { NVIC_InitTypeDef MyNVIC; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); MyNVIC.NVIC_IRQChannel = EXTI1_IRQn; MyNVIC.NVIC_IRQChannelPreemptionPriority = 0; MyNVIC.NVIC_IRQChannelSubPriority = 1; MyNVIC.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( &MyNVIC); } void Key1_NVIC_Init() { NVIC_InitTypeDef MyNVIC; \t NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); MyNVIC.NVIC_IRQChannel = EXTI9_5_IRQn; MyNVIC.NVIC_IRQChannelPreemptionPriority = 0; MyNVIC.NVIC_IRQChannelSubPriority = 0; MyNVIC.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( &MyNVIC); } /*************?D?ìó|oˉêy************/ void EXTI1_IRQHandler(void) //±?êy { if(RESET != EXTI_GetFlagStatus(EXTI_Line1)) { LED_s1 + + ; EXTI_ClearITPendingBit(EXTI_Line1); } } void EXTI9_5_IRQHandler(void) { if(RESET != EXTI_GetFlagStatus(EXTI_Line5)) { \t\t LED_min1 + + ; EXTI_ClearITPendingBit(EXTI_Line5); } } /****************?¨ê±?÷1?¢2?¢3NVICóè3?êˉ****************** */ void Timer_NVIC_Init(void) { NVIC_InitTypeDef MyNVIC; \t NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); MyNVIC.NVIC_IRQChannel = TIM3_IRQn; MyNVIC.NVIC_IRQChannelPreemptionPriority = 2; MyNVIC.NVIC_IRQChannelSubPriority = 2; MyNVIC.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( &MyNVIC); } void Timer2_NVIC_Init(void) { NVIC_InitTypeDef MyNVIC; \t NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); MyNVIC.NVIC_IRQChannel = TIM2_IRQn; //?D?′?a?¨ê±?÷2 MyNVIC.NVIC_IRQChannelPreemptionPriority = 1; //?¨ê±?÷2?àóè?a1 MyNVIC.NVIC_IRQChannelSubPriority = 2; //?¨ê±?÷2?ìó|óè?a2 MyNVIC.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( &MyNVIC); } void Timer3_NVIC_Init(void) { NVIC_InitTypeDef MyNVIC; \t NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); MyNVIC.NVIC_IRQChannel = TIM5_IRQn; MyNVIC.NVIC_IRQChannelPreemptionPriority = 1; MyNVIC.NVIC_IRQChannelSubPriority = 1; MyNVIC.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( &MyNVIC); } /****************?¨ê±?÷33?êˉ******************/ void TIM3_Init(void) { TIM_TimeBaseInitTypeDef MyTIM; RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM3EN,ENABLE); \t MyTIM.TIM_Prescaler = 800-1; MyTIM.TIM_Period = 1000-1; MyTIM.TIM_CounterMode = TIM_CounterMode_Up; //μYêy MyTIM.TIM_ClockDivision = 0; \t TIM_TimeBaseInit(TIM3, &MyTIM); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //ê1?ü TIM_Cmd(TIM3,ENABLE); } void TIM2_Init(void) { TIM_TimeBaseInitTypeDef MyTIM; RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM2EN,ENABLE); \t MyTIM.TIM_Prescaler = 8-1; MyTIM.TIM_Period = 1000-1; MyTIM.TIM_CounterMode = TIM_CounterMode_Up; MyTIM.TIM_ClockDivision = 0; \t TIM_TimeBaseInit(TIM2, &MyTIM); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); TIM_Cmd(TIM2,ENABLE); } void TIM5_Init(void) { TIM_TimeBaseInitTypeDef MyTIM; RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM5EN,ENABLE); \t MyTIM.TIM_Prescaler = 8-1; MyTIM.TIM_Period = 1000-1; MyTIM.TIM_CounterMode = TIM_CounterMode_Up; MyTIM.TIM_ClockDivision = 0; \t TIM_TimeBaseInit(TIM5, &MyTIM); TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE); TIM_Cmd(TIM5,ENABLE); } void TIM1_CH1_PWM_Init(u32 arr,u32 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //TIM1ê±?óê1?ü RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //ê1?üPORTAê±?ó GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIOA8 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //?′ó?1|?ü GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //?ù?è50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //í?íì?′ó?ê?3? GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //é?à- GPIO_Init(GPIOA, & amp;GPIO_InitStructure); //3?êˉPA8 GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_TIM1); TIM_DeInit(TIM1); TIM_TimeBaseStructure.TIM_Prescaler=psc; //?¨ê±?÷·μ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //?òé?êy?£ê? TIM_TimeBaseStructure.TIM_Period=arr; //×ˉ×°?μ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM1, & amp;TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OC1Init(TIM1, & TIM_OCInitStructure); //?ù?YT?¨μ?2?êy3?êˉíaéèTIM9 OC2 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //ê1?üTIM1?úCCR2é?μ¤×°′÷ TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable); TIM_ARRPreloadConfig(TIM1,ENABLE); //ARPEê1?ü TIM_Cmd(TIM1, ENABLE); //ê1?üTIM1 TIM_CtrlPWMOutputs(TIM1, ENABLE); TIM_SetCompare1(TIM1, 200); } void TIM3_IRQHandler (void) { if(RESET != TIM_GetITStatus(TIM3,TIM_IT_Update)) { LED_s1 + + ; LEDBuffer[0] = LED_s1; LEDBuffer[1] = LED_s2; LEDBuffer[2] = LED_min1; LEDBuffer[3] = LED_min2; \t\t\t\t\t\t\t if(LED_min2==2) { if(LED_min1==3) { if(LED_s2==5) { if(LED_s1==9) { LED_s1 = 0; LED_s2 = 0; LED_min1 = 0; LED_min2 = 0; \t\t\t\t\t\t } } } } \t\t if(LED_min1==9) { if(LED_s2==5) { if(LED_s1==9) { LED_min2 + + ; LED_min1=0; } } } \t\t if(LED_s2==5) { if(LED_s1==9) { LED_min1 + + ; LED_s2=0; } } \t\t if(LED_s1==9) { LED_s2 + + ; LED_s1=0; } \t\t TIM_ClearITPendingBit(TIM3,TIM_IT_Update); GPIO_Write(GPIOE,(LEDDIG[LEDIndex] << 9) | (LEDSEG[LEDBuffer[LEDIndex]])); if( + + LEDIndex >= sizeof(LEDBuffer))LEDIndex = 0; } } void TIM5_IRQHandler (void) { if(RESET != TIM_GetITStatus(TIM5,TIM_IT_Update)) { TIM_ClearITPendingBit(TIM5,TIM_IT_Update); // GPIO_Write(GPIOE,(LEDDIG[LEDIndex] << 9) | (LEDSEG[LEDBuffer[LEDIndex]])); if( + + LEDIndex >= sizeof(LEDBuffer))LEDIndex = 0; } } void TIM2_IRQHandler (void) { if(RESET != TIM_GetITStatus(TIM2,TIM_IT_Update)) { GPIO_ToggleBits(GPIOA,GPIO_Pin_9); TIM_ClearITPendingBit(TIM3,TIM_IT_Update); } } int main(void) { if(SysTick_Config(SystemCoreClock / 1000)){while(1);} TIM1_CH1_PWM_Init(1000-1,16-1); LEDPin_Init(); Timer_NVIC_Init(); TIM3_Init(); AJ_Init(); Key_EXTI_Init(); Key1_EXTI_Init(); Key_NVIC_Init(); Key1_NVIC_Init(); LEDFANZHUAN_Init(); TIM2_Init(); Timer2_NVIC_Init(); Timer3_NVIC_Init(); TIM5_Init(); while(1) { \t\t\t\t } }