Advertisement
Guest User

TIM for rogalson

a guest
Dec 19th, 2014
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. void setupTimer(uint32_t mikrosekundy) {
  2.     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  3.     TIM_OCInitTypeDef TIM_OCInitStructure;
  4.  
  5.     uint32_t ARR = 0;
  6.     uint16_t PSC = 0;
  7.  
  8.     if (mikrosekundy >= 10 && mikrosekundy <= 30000000) {
  9.         ARR = (mikrosekundy * (SystemCoreClock / 1000000)) - 1;
  10.         if (ARR > 0xFFFF) {
  11.             PSC = (ARR / 0xFFFF) - 1;
  12.             do {
  13.                 PSC++;
  14.                 ARR = (((SystemCoreClock / 1000000) * mikrosekundy) / (PSC + 1)) - 1;
  15.             }
  16.             while ((mikrosekundy * (SystemCoreClock / 1000000) % (ARR + 1)) != 0);
  17.         }
  18.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
  19.  
  20.         /* TIM1 Configuration */
  21.         TIM_DeInit(TIM1);
  22.         TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  23.         TIM_OCStructInit(&TIM_OCInitStructure);
  24.         /* Time base configuration */
  25.         TIM_TimeBaseStructure.TIM_Period = ARR;
  26.         TIM_TimeBaseStructure.TIM_Prescaler = PSC;
  27.         TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  28.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  29.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  30.  
  31.         /* Output Compare PWM Mode configuration */
  32.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; /* low edge by default */
  33.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  34.         TIM_OCInitStructure.TIM_Pulse = 0x01;
  35.         TIM_OC4Init(TIM1, &TIM_OCInitStructure);
  36.  
  37.         /* TIM1 enable counter */
  38.         TIM_Cmd(TIM1, ENABLE);
  39.  
  40.         /* Main Output Enable */
  41.         TIM_CtrlPWMOutputs(TIM1, ENABLE);
  42.  
  43.     }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement