Skocz do zawartości
rycho84

STM32F103C8Tx - komunikacja przez UART za pomocą przerwań

Pomocna odpowiedź

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 */
}

 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...