Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1. /**
  2. ******************************************************************************
  3. * @file main.c
  4. * @author Ac6
  5. * @version V1.0
  6. * @date 01-December-2013
  7. * @brief Default main function.
  8. ******************************************************************************
  9. */
  10.  
  11. #include "stm32f4xx.h"
  12. #include "stm32f4_discovery.h"
  13.  
  14. int stan = 0;
  15.  
  16. //funckja wywolujaca sie w trakcie przewania timera 4
  17. void TIM4_IRQHandler(void) {
  18. if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) {
  19. // miejsce na kod wywoływany w momencie wystąpienia przerwania
  20. if (stan == 0) {
  21. GPIO_ToggleBits(GPIOD, GPIO_Pin_12);
  22. stan++;
  23. } else if (stan == 1) {
  24. GPIO_ToggleBits(GPIOD, GPIO_Pin_13);
  25. stan++;
  26. } else if (stan == 2) {
  27. GPIO_ToggleBits(GPIOD, GPIO_Pin_14);
  28. stan++;
  29. } else if (stan == 3) {
  30. GPIO_ToggleBits(GPIOD, GPIO_Pin_15);
  31. stan++;
  32. } else if (stan == 4) {
  33. GPIO_ResetBits(GPIOD, GPIO_Pin_12);
  34. GPIO_ResetBits(GPIOD, GPIO_Pin_13);
  35. GPIO_ResetBits(GPIOD, GPIO_Pin_14);
  36. GPIO_ResetBits(GPIOD, GPIO_Pin_15);
  37. stan = 0;
  38. }
  39. // wyzerowanie flagi wyzwolonego przerwania
  40. TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  41. }
  42. }
  43.  
  44. void USART3_IRQHandler(void)
  45. {
  46. // sprawdzenie flagi zwiazanej z odebraniem danych przez USART
  47. if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
  48. {
  49. // odebrany bajt znajduje sie w rejestrze USART3->DR
  50. char odbiur =USART3->DR;
  51. if(odbiur == '+'){
  52. TIM4->PSC =TIM4->PSC *2 ;
  53. }
  54. if(odbiur == '-'){
  55. TIM4->PSC = TIM4->PSC /2;
  56. }
  57. }
  58. }
  59.  
  60.  
  61.  
  62. int main(void) {
  63. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  64. /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
  65. GPIO_InitTypeDef GPIO_InitStructure;
  66. GPIO_InitStructure.GPIO_Pin =
  67. GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  68. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  69. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  70. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  71. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  72. GPIO_Init(GPIOD, &GPIO_InitStructure);
  73. /////*KONIEC CONFIG GPIO*///////
  74.  
  75. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  76. /* Time base structure */
  77. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  78. /* Time base configuration */
  79. TIM_TimeBaseStructure.TIM_Period = 9999;
  80. TIM_TimeBaseStructure.TIM_Prescaler = 4199;
  81. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  82. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  83. TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  84.  
  85. // ustawienie trybu pracy priorytetów przerwań
  86. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  87. NVIC_InitTypeDef NVIC_InitStructure;
  88. // numer przerwania
  89. NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  90. // priorytet główny
  91. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  92. // subpriorytet
  93. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  94. // uruchom dany kanał
  95. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  96. // zapisz wypełnioną strukturę do rejestrów
  97. NVIC_Init(&NVIC_InitStructure);
  98. // wyczyszczenie przerwania od timera 3 (wystąpiło przy konfiguracji timera)
  99. TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  100. // zezwolenie na przerwania od przepełnienia dla timera 3
  101. TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
  102.  
  103.  
  104.  
  105. // wlaczenie taktowania wybranego portu
  106. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  107. // wlaczenie taktowania wybranego układu USART
  108. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  109.  
  110. //TxD -> PC11
  111. //RxD -> PC10
  112. //GND -> GND
  113.  
  114. // konfiguracja linii Rx i Tx
  115. GPIO_InitTypeDef LinieUsart;
  116. LinieUsart.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
  117. LinieUsart.GPIO_Mode = GPIO_Mode_AF;
  118. LinieUsart.GPIO_OType = GPIO_OType_PP;
  119. LinieUsart.GPIO_PuPd = GPIO_PuPd_UP;
  120. LinieUsart.GPIO_Speed = GPIO_Speed_50MHz;
  121. GPIO_Init(GPIOC, &LinieUsart);
  122. // ustawienie funkcji alternatywnej dla pinów (USART)
  123. GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3);
  124. GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_USART3);
  125.  
  126.  
  127. USART_InitTypeDef USART_InitStructure;
  128. // predkosc transmisji (mozliwe standardowe opcje: 9600, 19200, 38400, 57600, 115200, ...)
  129. USART_InitStructure.USART_BaudRate = 9600;
  130. // długość słowa (USART_WordLength_8b lub USART_WordLength_9b)
  131. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  132. // liczba bitów stopu (USART_StopBits_1, USART_StopBits_0_5, USART_StopBits_2, USART_StopBits_1_5)
  133. USART_InitStructure.USART_StopBits = USART_StopBits_1;
  134. // sprawdzanie parzystości (USART_Parity_No, USART_Parity_Even, USART_Parity_Odd)
  135. USART_InitStructure.USART_Parity = USART_Parity_No;
  136. // sprzętowa kontrola przepływu (USART_HardwareFlowControl_None, USART_HardwareFlowControl_RTS, USART_HardwareFlowControl_CTS, USART_HardwareFlowControl_RTS_CTS)
  137. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  138. // tryb nadawania/odbierania (USART_Mode_Rx, USART_Mode_Rx )
  139. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  140. // konfiguracja
  141. USART_Init(USART3, &USART_InitStructure);
  142.  
  143. // wlaczenie ukladu USART
  144. USART_Cmd(USART3, ENABLE);
  145. // uruchomienie Timera
  146. TIM_Cmd(TIM4, ENABLE);
  147.  
  148.  
  149. //struktura do konfiguracji kontrolera NVIC
  150. NVIC_InitTypeDef PrzerwanieUsart;
  151. // wlaczenie przerwania związanego z odebraniem danych (pozostale zrodla przerwan zdefiniowane sa w pliku stm32f4xx_usart.h)
  152. USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
  153. PrzerwanieUsart.NVIC_IRQChannel = USART3_IRQn;
  154. PrzerwanieUsart.NVIC_IRQChannelPreemptionPriority = 0;
  155. PrzerwanieUsart.NVIC_IRQChannelSubPriority = 0;
  156. PrzerwanieUsart.NVIC_IRQChannelCmd = ENABLE;
  157. // konfiguracja kontrolera przerwan
  158. NVIC_Init(&PrzerwanieUsart);
  159. // wlaczenie przerwan od ukladu USART
  160. NVIC_EnableIRQ(USART3_IRQn);
  161.  
  162.  
  163. for (;;);
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement