Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.86 KB | None | 0 0
  1. #include "stm32f10x.h"
  2.  
  3. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  4. TIM_OCInitTypeDef  TIM_OCInitStructure;
  5.  
  6. void RCC_Conf(void);
  7. void GPIO_Conf(void);
  8. void NVIC_Conf(void);
  9.  
  10. __IO uint16_t CC1 = 32768;
  11. __IO uint16_t CC2 = 16384;
  12. __IO uint16_t CC3 = 8192;
  13. __IO uint16_t CC4 = 4096;
  14.  
  15. int main(void)
  16. {
  17. #ifdef DEBUG
  18.     debug();
  19. #endif
  20.  
  21.     RCC_Conf();
  22.     NVIC_Conf();
  23.     GPIO_Conf();
  24.  
  25.     // Ustawienia ukladu podstawy czasu
  26.     TIM_TimeBaseStructure.TIM_Period = 65535;
  27.     TIM_TimeBaseStructure.TIM_Prescaler = 1440;  //fclk = 72MHz/1440 = 50kHz
  28.     TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  29.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  30.  
  31.     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  32.  
  33.     // Konfiguracja kanalu 2
  34.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  35.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  36.     TIM_OCInitStructure.TIM_Pulse = CC2;
  37.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  38.     TIM_OC2Init(TIM1, &TIM_OCInitStructure);
  39.  
  40.     TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Disable);
  41.  
  42.     // Konfiguracja kanalu 3
  43.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  44.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  45.     TIM_OCInitStructure.TIM_Pulse = CC3;
  46.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  47.     TIM_OC3Init(TIM1, &TIM_OCInitStructure);
  48.  
  49.     TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Disable);
  50.  
  51.     // Wlaczenie przerwan od kanalow
  52.     TIM_ITConfig(TIM1, TIM_IT_CC2 | TIM_IT_CC3, ENABLE);
  53.  
  54.     // Wlaczenie timera
  55.     TIM_Cmd(TIM1, ENABLE);
  56.  
  57.     while (1);
  58. }
  59.  
  60. void RCC_Conf(void)
  61. {
  62.     ErrorStatus HSEStartUpStatus;
  63.  
  64.     // Reset ustawien RCC
  65.     RCC_DeInit();
  66.  
  67.     // Wlacz HSE
  68.     RCC_HSEConfig(RCC_HSE_ON);
  69.  
  70.     // Czekaj za HSE bedzie gotowy
  71.     HSEStartUpStatus = RCC_WaitForHSEStartUp();
  72.  
  73.     if(HSEStartUpStatus == SUCCESS)
  74.     {
  75.         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  76.  
  77.         // zwloka dla pamieci Flash
  78.         FLASH_SetLatency(FLASH_Latency_2);
  79.  
  80.         // HCLK = SYSCLK
  81.         RCC_HCLKConfig(RCC_SYSCLK_Div1);
  82.  
  83.         // PCLK2 = HCLK
  84.         RCC_PCLK2Config(RCC_HCLK_Div1);
  85.  
  86.         // PCLK1 = HCLK/4
  87.         RCC_PCLK1Config(RCC_HCLK_Div4);
  88.  
  89.         // PLLCLK = 8MHz * 9 = 72 MHz
  90.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  91.  
  92.         // Wlacz PLL
  93.         RCC_PLLCmd(ENABLE);
  94.  
  95.         // Czekaj az PLL poprawnie sie uruchomi
  96.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  97.  
  98.         // PLL bedzie zrodlem sygnalu zegarowego
  99.         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  100.  
  101.         // Czekaj az PLL bedzie sygnalem zegarowym systemu
  102.         while(RCC_GetSYSCLKSource() != 0x08);
  103.  
  104.         // Wlacz taktowanie GPIOB i TIM1
  105.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOB, ENABLE);
  106.     }
  107. }
  108.  
  109. void GPIO_Conf(void)
  110. {
  111.     GPIO_InitTypeDef GPIO_InitStructure;
  112.  
  113.     // Porty PB8, PB9, PB10, PB11 jako wyjscia push - pull
  114.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15 ;
  115.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  116.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  117.  
  118.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  119.  
  120.     GPIO_ResetBits(GPIOB, GPIO_Pin_14 | GPIO_Pin_15 );
  121.  
  122. }
  123.  
  124. void NVIC_Conf(void)
  125. {
  126.     NVIC_InitTypeDef NVIC_InitStructure;
  127.  
  128.     #ifdef  VECT_TAB_RAM
  129.         // Jezeli tablica wektorow w RAM, to ustaw jej adres na 0x20000000
  130.         NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  131.     #else  // VECT_TAB_FLASH
  132.         // W przeciwnym wypadku ustaw na 0x08000000
  133.         NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  134.     #endif
  135.  
  136.     // Wlacz przerwanie od TIM1
  137.     NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
  138.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  139.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  140.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  141.     NVIC_Init(&NVIC_InitStructure);
  142. }
  143.  
  144. #ifdef  DEBUG
  145. void assert_failed(uint8_t* file, uint32_t line)
  146. {
  147.     while (1);
  148. }
  149. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement