Estoy intentando enviar y recibir datos hacia y desde un STM32F1xx. Tengo el STM32 para enviar con éxito los datos a la computadora. Hice eso usando el siguiente código.
__HAL_RCC_USART1_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
//Setup UART RX Pin
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
UartHandle.Instance = USART1;
UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
//Error handling
if(HAL_UART_DeInit(&UartHandle) != HAL_OK) {
Error_Handler();
}
if(HAL_UART_Init(&UartHandle) != HAL_OK) {
Error_Handler();
}
char msg[] = "testing\n\r";
while(1) {
HAL_UART_Transmit(&UartHandle, (uint8_t*)msg, sizeof(msg), 10);
}
El código de arriba funciona perfectamente. Luego intenté enviar datos desde la computadora al STM32. Probé el siguiente código
if(HAL_UART_Receive_IT(&UartHandle, (uint8_t*)msg, 5) == HAL_OK) {
char msg[] = "HAL_OK";
HAL_UART_Transmit(&UartHandle, (uint8_t*)msg, sizeof(msg), 10);
}
y no funcionó. No se enviaron datos a la computadora cuando envié un byte al STM32. Hice algo de depuración y la función de recepción devuelve HAL_OK una vez al inicio y luego, después de eso, devuelve HAL_BUSY. Esto me hace pensar que tienes que usar interrupciones, pero lo estoy usando con Receive_IT. ¿Cómo resuelvo este problema?