#c #callback #stm32 #usart
#c #обратный вызов #stm32 #usart
Вопрос:
В настоящее время я работаю над проектом, в котором я хочу взаимодействовать с модулем ESP8266 с помощью usart-1 и иметь другой usart-2, который можно было бы использовать в putty. Мой вопрос в том, есть ли какая-либо возможность достичь этой цели с помощью функции HAL_UART_RxCpltCallback? До сих пор все мои попытки сделать это с треском провалились, и лучшее, что я мог, — это создать связь, при которой данные могут быть отправлены в esp, но ответ не может быть получен. Все мои другие попытки закончились созданием цикла между usarts. Заранее благодарю вас
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
uint8_t Data[50];
uint16_t size = 0;
size = sprintf(Data, "%c", Received);
if(Received != 'r' amp;amp; Received != 'n')
{
RingBuffer_PutChar(amp;USART_RingBuffer_Tx, Received);
HAL_UART_Transmit_IT(amp;huart1, Data, size);
HAL_UART_Receive_IT(amp;huart1, amp;Received, 1);
}
else
{
if(Received == 'n')
{
//size = sprintf(Data, "nr", 2);
HAL_UART_Transmit_IT(amp;huart1,(uint8_t*) "nr", 2);
HAL_UART_Receive_IT(amp;huart1, amp;Received, 1);
}
if(Received == 'r')
{
if(!RingBuffer_IsEmpty(amp;USART_RingBuffer_Tx))
{
RingBuffer_PutChar(amp;USART_RingBuffer_Tx, 'r');
RingBuffer_PutChar(amp;USART_RingBuffer_Tx, 'n');
HAL_UART_Transmit_IT(amp;huart6, (uint8_t*) RingBufferData_Tx, sizeof(RingBufferData_Tx));
HAL_UART_Transmit_IT(amp;huart1, "nSentnr", 12);
HAL_UART_Receive_IT(amp;huart6, amp;Received1, 1);
HAL_UART_Receive_IT(amp;huart1, amp;Received, 1);
RingBuffer_Clear(amp;USART_RingBuffer_Tx);
}
else
{
HAL_UART_Transmit_IT(amp;huart1,(uint8_t*) "Buffer is emptynr", 17);
HAL_UART_Receive_IT(amp;huart1, amp;Received, 1);
}
}
}
}
Ответ №1:
Функция HAL_UART_RxCpltCallback имеет параметр UART_HandleTypeDef *huart, поэтому вы можете проверить, какой экземпляр UART вызвал этот обратный вызов. Вы можете проверить, является ли это usart-1 или usart-2, и выполнить код в соответствии с этим.