Advertisement
Guest User

Untitled

a guest
Nov 26th, 2015
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1. #include "stm32f4xx_conf.h"
  2. #include "stm32f4xx_gpio.h"
  3. #include "stm32f4xx_rcc.h"
  4. #include "stm32f4xx_tim.h"
  5. #include "misc.h"
  6. #include "stm32f4xx_exti.h"
  7. #include "stm32f4xx_syscfg.h"
  8.  
  9.  
  10. GPIO_InitTypeDef GPIO_InitStructure;
  11. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  12. int stan = 0;
  13. int i;
  14.  
  15. void Delay(__IO uint32_t nCount)
  16. {
  17. while(nCount--)
  18. {
  19. }
  20. }
  21.  
  22.  
  23. GPIO_konfiguracja()
  24. {
  25. // Configure PD12, PD13, PD14 and PD15 in output pushpull mode
  26. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14|GPIO_Pin_15;
  27. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  28. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  29. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  30. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  31. GPIO_Init(GPIOD, &GPIO_InitStructure);
  32. }
  33. void TIM3_IRQHandler(void)
  34. {
  35. unsigned int i;
  36. if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  37. {
  38.  
  39. while(1)
  40. {
  41.  
  42. GPIO_ToggleBits(GPIOD, GPIO_Pin_12);
  43. for(i=0;i< 100000;i++){}
  44. }
  45. // wyzerowanie flagi wyzwolonego przerwania
  46. TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  47. }
  48.  
  49. }
  50. void TIM4_IRQHandler(void)
  51. {
  52. unsigned int i;
  53. if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
  54. {
  55.  
  56. while(1)
  57. {
  58.  
  59. GPIO_ToggleBits(GPIOD, GPIO_Pin_13);
  60. for(i=0;i< 100000;i++){}
  61. }
  62. // wyzerowanie flagi wyzwolonego przerwania
  63. TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  64. }
  65.  
  66. }
  67.  
  68.  
  69. void przerwanie_wew_tim3()
  70. {
  71. // ustawienie trybu pracy priorytetow przerwan
  72. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  73. NVIC_InitTypeDef NVIC_InitStructure;
  74. // numer przerwania
  75. NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  76. // priorytet glowny
  77. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; // 15
  78. // subpriorytet
  79. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  80. // uruchom dany kanal
  81. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  82. // zapisz wypelniona strukturedo rejestrow
  83. NVIC_Init(&NVIC_InitStructure);
  84.  
  85. //Numerow przerwan nalezy szukac w pliku stm32f4xx.h jako wartosci typu
  86. //wyliczeniowego IRQn.
  87.  
  88. // wyczyszczenie przerwania od timera 3 (wystapilo przy konfiguracji timera)
  89. TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  90. // zezwolenie na przerwania od przepelnienia dla timera 3
  91. TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  92. }
  93.  
  94. void przerwanie_wew_tim4()
  95. {
  96. // ustawienie trybu pracy priorytetow przerwan
  97. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  98. NVIC_InitTypeDef NVIC_InitStructure;
  99. // numer przerwania
  100. NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  101. // priorytet glowny
  102. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  103. // subpriorytet
  104. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  105. // uruchom dany kanal
  106. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  107. // zapisz wypelniona strukturedo rejestrow
  108. NVIC_Init(&NVIC_InitStructure);
  109.  
  110. //Numerow przerwan nalezy szukac w pliku stm32f4xx.h jako wartosci typu
  111. //wyliczeniowego IRQn.
  112.  
  113. // wyczyszczenie przerwania od timera 3 (wystapilo przy konfiguracji timera)
  114. TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  115. // zezwolenie na przerwania od przepelnienia dla timera 3
  116. TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
  117. }
  118. void zad6()
  119. {
  120. //Korzystając z informacji przedstawionych na wykładzie oraz informacji
  121. //zawartych w pliku misc.c dotyczących priorytetów
  122. //(NVIC_IRQChannelPreemptionPriority oraz NVIC_IRQChannelSubPriority) napisać
  123. //program, który zobrazuje działanie wywłaszczania przerwań. Przykład: stworzyć
  124. //dwa timery, które odmierzają odpowiednio 5 oraz 10 sekund. W funkcjach
  125. //obsługi przerwań umieścić nieskończoną pętlę, która zmienia stanu pinu od
  126. //diody LED w pewnych odstępach czasu (opóźnienia za pomocą pustych pętli).
  127. //Niech każda z funkcji obsługi timera kontroluje inną diodę. Modyfikując
  128. //priorytety przerwań obserwować efekty wykonania programu
  129.  
  130.  
  131.  
  132. SystemInit();
  133. SystemCoreClockUpdate();
  134.  
  135. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  136. //RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  137. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  138.  
  139. GPIO_konfiguracja();
  140.  
  141.  
  142. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  143.  
  144. // Time base configuration
  145. TIM_TimeBaseStructure.TIM_Period =41999; // co 5sek - 41999,9995 // co 3 = 5997 ;
  146. TIM_TimeBaseStructure.TIM_Prescaler = 9995;
  147. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  148. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  149. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  150.  
  151. //uruchomienie timera
  152. TIM_Cmd(TIM3, ENABLE);
  153.  
  154.  
  155.  
  156. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  157. //timer
  158. TIM_TimeBaseStructure.TIM_Period = 41999; //2000; //41999; // co 200ms - 41999, 399,8
  159. TIM_TimeBaseStructure.TIM_Prescaler = 19990; //399; //8400; //9995; // co 10 sek = 19990
  160. TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  161. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  162. TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  163. TIM_Cmd(TIM4,ENABLE);
  164.  
  165. //dla tim3
  166. //przerwania_wewnetrzne();
  167. przerwanie_wew_tim3();
  168.  
  169. //dla tim4
  170. //przerwania_wewnetrzne_tim4_v2();
  171. przerwanie_wew_tim4();
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178. }
  179. int main()
  180. {
  181. //zad1();
  182. //zad2();
  183. //zad3();
  184.  
  185. //zad4();
  186.  
  187. //zad5();
  188.  
  189. zad6();
  190.  
  191. while(1)
  192. {}
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement