Advertisement
dargenn

Untitled

Mar 23rd, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.37 KB | None | 0 0
  1. #include "stm32f10x.h"
  2. #include "stm32f10x_exti.h"
  3. #define SysTick_Frequency 9000000 //9MHz
  4. volatile unsigned long counter = 0;
  5. int mode = 2;
  6. int frequency = 25000;
  7.  
  8. void NVIC_Config(void);
  9. void NVIC_ConfigUp(void);
  10. void NVIC_ConfigDown(void);
  11. void NVIC_ConfigLow(void);
  12. void NVIC_ConfigHigh(void);
  13.  
  14. void RCC_Config(void) {//konfigurowanie sygnalow taktujacych
  15. ErrorStatus HSEStartUpStatus; //zmienna opisujaca rezultat uruchomienia HSE
  16. RCC_DeInit(); //Reset ustawien RCC
  17. RCC_HSEConfig(RCC_HSE_ON); //Wlaczenie HSE
  18. HSEStartUpStatus = RCC_WaitForHSEStartUp(); //Odczekaj az HSE bedzie gotowy
  19. if (HSEStartUpStatus == SUCCESS) {
  20. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //
  21. FLASH_SetLatency(FLASH_Latency_2);
  22. RCC_HCLKConfig(RCC_SYSCLK_Div1); //ustaw HCLK=SYSCLK
  23. RCC_PCLK2Config(RCC_HCLK_Div1); //ustaw PCLK2=HCLK
  24. RCC_PCLK1Config(RCC_HCLK_Div2); //ustaw PCLK1=HCLK/2
  25. RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //ustaw PLLCLK = HSE*9 czyli 8MHz * 9 = 72MHz
  26. RCC_PLLCmd(ENABLE); //wlacz PLL
  27. while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //odczekaj na poprawne uruchomienie PLL
  28. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //ustaw PLL jako zrodlo sygnalu zegarowego
  29. while (RCC_GetSYSCLKSource() != 0x08); //odczekaj az PLL bedzie sygnalem zegarowym systemu
  30. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  31. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  32. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  33. }
  34. }
  35. void GPIO_Config(void) {
  36. GPIO_InitTypeDef GPIO_InitStructure;
  37. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  38. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  39. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  40. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |
  41. GPIO_Pin_5;
  42. GPIO_Init(GPIOA, & GPIO_InitStructure);
  43. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  44. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  45. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |
  46. GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  47. GPIO_Init(GPIOB, & GPIO_InitStructure);
  48. }
  49.  
  50. uint8_t button_state = 0xFF, temp = 0, port_data;
  51. int przycisk, joyLeft, joyRight;
  52. void changeState() {
  53. if (mode == 3) {
  54. mode = 1;
  55. } else {
  56. mode++;
  57. }
  58. }
  59. void changeFrequency(int val) {
  60. frequency += val;
  61. if (frequency < 1000)
  62. frequency = 1000;
  63. else if (frequency > 4000) {
  64. frequency = 4000;
  65. }
  66. }
  67.  
  68. int main(void)
  69. //konfiguracja systemu
  70. {
  71. RCC_Config();
  72. GPIO_Config();
  73. NVIC_ConfigHigh();
  74. NVIC_ConfigLow();
  75. while (1) {
  76. /*Tu nalezy umiescic glowny kod programu*/
  77. };
  78. return 0;
  79. }
  80. void NVIC_ConfigHigh(void) {
  81. //Konfigurowanie kontrolera przerwan NVIC
  82. NVIC_InitTypeDef NVIC_InitStructure;
  83. EXTI_InitTypeDef EXTI_InitStructure;
  84. #ifdef VECT_TAB_RAM
  85. // Jezeli tablica wektorow w RAM, to ustaw jej adres na 0x2000000 0
  86. NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  87. #else // VECT_TAB_FLASH
  88. // W przeciwnym wypadku ustaw na 0x08000000
  89. NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  90. #endif
  91. //Konfiguracja NVIC - ustawienia priorytetow przerwania EXTI 0
  92. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //Wybo r modelu grupowania przerwan
  93. NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //Wybo r konfigurowanego IRQ
  94. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //Prioryte t grupowy
  95. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  96. //Podpriorytet
  97. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //Wlaczeni e obslugi IRQ
  98. NVIC_Init( & NVIC_InitStructure);
  99. GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //Ustawieni e zrodla przerwania
  100. //Konfiguracja przerwania EXTI0 na linie 0
  101. EXTI_InitStructure.EXTI_Line = EXTI_Line0; //Wybo r linii
  102. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //Ustawieni e generowania przerwania(a nie zdarzenia)
  103. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //Wyzwalani e zboczem opadajacym(wcisniecie przycisku)
  104. EXTI_InitStructure.EXTI_LineCmd = ENABLE; //Wlaczeni e przerwania
  105. EXTI_Init( & EXTI_InitStructure);
  106. }
  107.  
  108. void NVIC_ConfigLow(void) {
  109. NVIC_InitTypeDef NVIC_InitStructure;
  110. EXTI_InitTypeDef EXTI_InitStructure;
  111. NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //Wybo r konfigurowanego IRQ
  112. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //Prioryte t grupowy
  113. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  114. //Podpriorytet
  115. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //Wlaczeni e obslugi IRQ
  116. NVIC_Init( & NVIC_InitStructure);
  117. GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); //Ustawieni e zrodla przerwania
  118. //Konfiguracja przerwania EXTI0 na linie 0
  119. EXTI_InitStructure.EXTI_Line = EXTI_Line1; //Wybo r linii
  120. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //Ustawienie generowania przerwania(a nie zdarzenia)
  121. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //Wyzwalanie zboczem opadajacym(wcisniecie przycisku)
  122. EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  123. EXTI_Init( & EXTI_InitStructure);
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement