Advertisement
Slightom

SW-PS4-zad1-main

Mar 18th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.22 KB | None | 0 0
  1. #include "stm32f10x.h"
  2. void GPIO_Config(void);
  3. void RCC_Config(void);
  4. #define SysTick_Frequency 9000000 // 9MHz
  5.  
  6.  
  7. uint16_t intTo7seg(uint8_t cyfra);
  8. void displayNextDigit();
  9.  
  10. uint8_t counter = 0;
  11.  
  12.  
  13. void Delay (uint32_t ms) // nasza funkcja opóznienia wykorzystujaca timer SysTick
  14. {
  15.     if (SysTick_Config(SysTick_Frequency / 1000 * ms))
  16.     {
  17.         while(1);
  18.     }
  19.     SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
  20. }
  21.  
  22.  
  23.  
  24. int main(void)
  25. {  
  26.     volatile unsigned long int j;
  27.     //konfiguracja systemu
  28.     RCC_Config();
  29.     GPIO_Config();
  30.    
  31.     Delay(1000);
  32.    
  33.     while (1)
  34.     {
  35.     };
  36.    
  37.    
  38.     return 0;
  39. }
  40.  
  41. void displayNextDigit()
  42. {
  43.     GPIO_Write(GPIOB, intTo7seg(counter++));
  44.     if(counter==16) { counter=0; };
  45. }
  46.  
  47. // konwersja na kod wyswietlacza 7-segmentowego
  48. uint16_t intTo7seg(uint8_t cyfra)
  49. {
  50.     uint16_t result;
  51.     switch (cyfra)
  52.     {
  53.         case 0:  result=0xC0; break; // 11000000 0
  54.         case 1:  result=0xF9; break; // 11111001 1
  55.         case 2:  result=0xA4; break; // 10100100 2
  56.         case 3:  result=0xB0; break; // 10110000 3
  57.         case 4:  result=0x99; break; // 10011011 4
  58.         case 5:  result=0x92; break; // 10010010 5
  59.         case 6:  result=0x82; break; // 10000010 6
  60.         case 7:  result=0xF8; break; // 11111000 7
  61.         case 8:  result=0x80; break; // 10000000 8
  62.         case 9:  result=0x90; break; // 10010000 9
  63.         case 10: result=0x88; break; // 10001000 a
  64.         case 11: result=0x83; break; // 10000011 b
  65.         case 12: result=0xC6; break; // 11000110 c
  66.         case 13: result=0xA1; break; // 10100001 d
  67.         case 14: result=0x86; break; // 10000110 e
  68.         case 15: result=0x8E; break; // 10001110 f
  69.         default: result=0xFF; break; // 11111111 - nic do wyswietlenia
  70.     }
  71.  
  72.     return result;
  73. }
  74.  
  75.  
  76.  
  77.  
  78. void RCC_Config(void)
  79. //konfigurowanie sygnalow taktujacych
  80. {
  81.   ErrorStatus HSEStartUpStatus;                          //zmienna opisujaca rezultat uruchomienia HSE
  82.  
  83.   RCC_DeInit();                                          //Reset ustawien RCC
  84.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  85.   RCC_HSEConfig(RCC_HSE_ON);                             //Wlaczenie HSE
  86.   HSEStartUpStatus = RCC_WaitForHSEStartUp();            //Odczekaj az HSE bedzie gotowy
  87.   if(HSEStartUpStatus == SUCCESS)
  88.   {
  89.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//
  90.     FLASH_SetLatency(FLASH_Latency_2);                   //ustaw zwloke dla pamieci Flash; zaleznie od taktowania rdzenia
  91.                                                          //0:<24MHz; 1:24~48MHz; 2:>48MHz
  92.     RCC_HCLKConfig(RCC_SYSCLK_Div1);                     //ustaw HCLK=SYSCLK
  93.     RCC_PCLK2Config(RCC_HCLK_Div1);                      //ustaw PCLK2=HCLK
  94.     RCC_PCLK1Config(RCC_HCLK_Div2);                      //ustaw PCLK1=HCLK/2
  95.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //ustaw PLLCLK = HSE*9 czyli 8MHz * 9 = 72 MHz
  96.     RCC_PLLCmd(ENABLE);                                  //wlacz PLL
  97.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  //odczekaj na poprawne uruchomienie PLL
  98.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);           //ustaw PLL jako zrodlo sygnalu zegarowego
  99.     while(RCC_GetSYSCLKSource() != 0x08);                //odczekaj az PLL bedzie sygnalem zegarowym systemu
  100.  
  101.     /*Tu nalezy umiescic kod zwiazany z konfiguracja sygnalow zegarowych potrzebnych w programie peryferiow*/
  102.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);//wlacz taktowanie portu GPIO A
  103.    
  104.   }
  105.   else {}
  106. }
  107.  
  108.  
  109.  
  110. void GPIO_Config(void)
  111. {
  112.   //konfigurowanie portow GPIO
  113.   GPIO_InitTypeDef  GPIO_InitStructure;
  114.   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  115.  
  116.   /*Tu nalezy umiescic kod zwiazany z konfiguracja poszczegolnych portow GPIO potrzebnych w programie*/
  117.   GPIO_InitStructure.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;
  118.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  119.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //wyjscie push-pull
  120.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  121.  
  122.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
  123.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  124.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;      //wejscie bez podciagania
  125.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement