#include "UartReader.h" extern UART_HandleTypeDef huart1; static UartReader* volatile _uartReader = nullptr; UartReader::UartReader(){ _uartReader = this; } void UartReader::start(LineCallback lineCallback) { _lineCallback = lineCallback; HAL_UART_Receive_IT(&huart1, _writeBuffer, 1); } void UartReader::onDataRx(){ if(_writeBuffer[_rxSize] == '\r'){ _writeBuffer[_rxSize] = 0; auto tmp = _writeBuffer; _writeBuffer = _readBuffer; _readBuffer = tmp; auto lineSize = _rxSize; _rxSize = 0; _lineCallback(reinterpret_cast(_readBuffer), lineSize); HAL_UART_Receive_IT(&huart1, &_writeBuffer[_rxSize], 1); }else{ _rxSize++; HAL_UART_Receive_IT(&huart1, &_writeBuffer[_rxSize], 1); } } extern "C" void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart == &huart1) { _uartReader->onDataRx(); } }