Experiment 3 STM32 timer application experiment

#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
}
}