STM32 Serial Bridge

1. Konfiguracja mikrokontrolera

Włączamy USART1 i USTAR2, oraz przerwania dla UARTów. Konfigurujemy pin diody LED.

2. Kod w main.c

/* USER CODE BEGIN PV */
uint8_t rx1;
uint8_t rx2;
uint32_t led_timer = 0;
/* USER CODE END PV */
/* USER CODE BEGIN PFP */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)
    {
        HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
        led_timer = HAL_GetTick();

        HAL_UART_Transmit_IT(&huart2, &rx1, 1);
        HAL_UART_Receive_IT(&huart1, &rx1, 1);
    }
    else if (huart->Instance == USART2)
    {
        HAL_UART_Transmit_IT(&huart1, &rx2, 1);
        HAL_UART_Receive_IT(&huart2, &rx2, 1);
    }
}
/* USER CODE END 0 */

w w funkcji main() po wszystkich initach:

  /* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart1, &rx1, 1);
  HAL_UART_Receive_IT(&huart2, &rx2, 1);
  /* USER CODE END 2 */

w pętli while(1):

      if (HAL_GetTick() - led_timer > 50) // 50 ms
      {
          HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
      }