Skocz do zawartości

rycho84

Użytkownicy
  • Zawartość

    2
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O rycho84

  • Ranga
    1/10
  1. Witam, piszę mały programik do komunikacji przez UART z pomocą przerwań, a że jestem początkujący to mam mały problem, ogólnie wszystko działa, tylko po wywołaniu przerwania i odebraniu danych, program nie powraca już do pętli głównej, może mi ktoś podpowiedzieć gdzie zrobiłem błąd? oto kod: #include "main.h" #include "string.h" #include "stm32f1xx_hal.h" /* Private variables ---------------------------------------------------------*/ UART_HandleTypeDef huart2; /* USER CODE BEGIN PV */ uint8_t key[1]; volatile uint8_t stan = 0; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void Error_Handler(void); void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART2_UART_Init(void); /* USER CODE BEGIN PFP */ void uart_write(UART_HandleTypeDef * handler, char * text) { HAL_UART_Transmit(handler, text, strlen(text), 1000); } void uart_write_line(UART_HandleTypeDef * handler, char * text) { HAL_UART_Transmit(handler, text, strlen(text), 1000); HAL_UART_Transmit(handler, "\r\n", 2, 1000); } uart_read_line(UART_HandleTypeDef * handler, char * buffer, uint16_t buffer_size) { HAL_StatusTypeDef status; char current_char; uint16_t char_counter = 0; while (char_counter < buffer_size - 1) { status = HAL_UART_Receive(handler, &current_char, 1, 1); if (status == HAL_OK) { if (current_char == '\r' || current_char == '\n') if (char_counter == 0) continue; else break; *(buffer + char_counter++) = current_char; } } *(buffer + char_counter) = '\0'; } /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { char buffer[1024]; uart_read_line(&huart2, buffer, 1024); uart_write(&huart2, "Odebrano: "); uart_write_line(&huart2, buffer); HAL_UART_Receive_IT(&huart2,key, 1); } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ SystemCoreClock = 8000000; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart2, key, 1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ uart_write_line(&huart2, "jestem"); HAL_Delay(1000); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
  2. Witam, od jakiegoś czasu bawię się z arduino, i nadszedł chyba czas aby przesiąść się na coś "mocniejszego", myślę o STM32 A u Was widzę niezły potencjał w tym temacie. A przy okazji to życzę szczęśliwego Nowego Roku wszystkim forumowiczom
×
×
  • Utwórz nowe...