Использую передачу данных по UART-у. Приход данных ловлю по прерыванию, используя функцию обработки прерывания:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
prRecv = true;
// ==========================================================
// на самом деле этот код лежит в основном цикле программы
// Я показал просто как и что выводится в LCD
NumR++; if (NumR>255) NumR = 0;
sprintf(data1, "To TM4C: %d#", NumR);
sprintf(data2, "%s", (char *)receiveBuffer);
HD44780_Clear(LCD_ADDR);
HD44780_SetCursor(0,0, LCD_ADDR);
HD44780_PrintStr(data1, LCD_ADDR);
HD44780_SetCursor(0,1, LCD_ADDR);
HD44780_PrintStr(data2, LCD_ADDR);
// =========================================================
HAL_UART_Receive_IT(&huart1, receiveBuffer, BUFFER_SIZE);
}
}
receiveBuffer почему то получается бегущей строкой. Видео предлагаю, кто знает как избавиться от такого эффекта?
Надо посмотреть под отладчиком, в receiveBuffer уже данные смещены, тогда проблема в этой части, либо в revceiveBuffer все нормально, тогда дело в выводе на дисплей.
Я нашел причину. Отсылка данных к STM32 идет с контроллера TM4C1294. Там нет HAL-функций и отправку сообщений надо писать самому используя функции более низкого уровня. Подправил и все стало работать, как надо! Спасибо за советы, они помогли мне подумать!