Невозможно передать все символы через UART

Я использую stm32f0 MCU.

Я хотел бы передать каждый байт, полученный от UART, из UART. Я включаю прерывание для каждого байта, полученного от UART.

Мой код довольно прост.

uint8_t Rx_data[5]; 

//Interrupt callback routine
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)  //current UART
    {
        HAL_UART_Transmit(&huart1, &Rx_data[0], 1, 100);        
        HAL_UART_Receive_IT(&huart1, Rx_data, 1);   //activate UART receive interrupt every time on receiving 1 byte
    }
}

Мой компьютер передает ASCII 12345678 до стм32. Если все работает как положено, ПК должен получать 12345678 назад. Тем не менее, ПК получает 1357 вместо. Что не так с кодом?

3 ответа

Повторное включение прерываний может быть неэффективным. С помощью пары модификаций можно поддерживать активное прерывание без необходимости переписывать обработчик заново. Смотрите пример ниже, измененный из генератора stm32cubemx.

/**
* @brief This function handles USART3 to USART6 global interrupts.
*/
void USART3_6_IRQHandler(void)
{
  InterruptGPS(&huart5);
}

void InterruptGPS(UART_HandleTypeDef *huart) {
    uint8_t rbyte;
    if (huart->Instance != USART5) {
        return;
    }
    /* UART in mode Receiver ---------------------------------------------------*/
    if((__HAL_UART_GET_IT(huart, UART_IT_RXNE) == RESET) || (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) == RESET)) {
        return;
    }
    rbyte = (uint8_t)(huart->Instance->RDR & (uint8_t)0xff);
    __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);

    // do your stuff

}

static void init_gps() {
    __HAL_UART_ENABLE_IT(&huart5, UART_IT_RXNE);
}

Вы также должны создать буфер массива tx и использовать прерывание для записи (первая запись, если она еще не включена, должна быть отправлена ​​немедленно).

Должны быть примеры этого для STM32.

Вам, вероятно, следует переключиться на две строки: Transmit и Receive. Функция передачи ожидает тайм-аут для отправки символа, в то время как следующий полученный символ пропускается.

Другие вопросы по тегам