Skocz do zawartości

rycho84

Użytkownicy
  • Zawartość

    2
  • Rejestracja

  • Ostatnio

Posty napisane przez rycho84


  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...