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);
}