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); } }
Я HAL не знаю, но мне кажется, что в прерывании вызывается функция приёма через прерывание.
Надо посмотреть под отладчиком, в receiveBuffer уже данные смещены, тогда проблема в этой части, либо в revceiveBuffer все нормально, тогда дело в выводе на дисплей.
Я нашел причину. Отсылка данных к STM32 идет с контроллера TM4C1294. Там нет HAL-функций и отправку сообщений надо писать самому используя функции более низкого уровня. Подправил и все стало работать, как надо! Спасибо за советы, они помогли мне подумать!