shooting process

This commit is contained in:
2024-09-22 00:19:50 +03:00
parent 6746f19cf0
commit b98846eac1
12 changed files with 393 additions and 151 deletions

View File

@ -18,14 +18,12 @@ extern UART_HandleTypeDef huart3;
void UART3_CMD_Handler(uint8_t *dataPtr, uint8_t len);
void UART3_START() {
HAL_UART_Receive_DMA(&huart3, uart_rx_buffer, UART_BUFFER_SIZE);
}
volatile uint32_t last_rx_time = 0;
volatile uint32_t rx_complete_timeout = 10;
volatile uint32_t rx_complete_timeout = 15;
volatile uint32_t old_pos = 0;
volatile uint16_t rx_index = 0;
extern DMA_HandleTypeDef hdma_usart3_rx;
@ -123,12 +121,56 @@ void process_uart_data(uint32_t old_pos, uint32_t new_pos)
handle_rx_data(&uart_rx_buffer[0], new_pos);
}
}
volatile uint8_t rx_in_progress = 0;
void check_uart3_timeout(void)
{
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART3)
{
char error_msg[128];
// Логгирование состояния до перезапуска
snprintf(error_msg, sizeof(error_msg),
"UART3 Error Detected: Code = 0x%02X, DMA Counter = %lu\n",
huart->ErrorCode, __HAL_DMA_GET_COUNTER(&hdma_usart3_rx));
CDC_Transmit_FS((uint8_t*) error_msg, strlen(error_msg));
// Останавливаем UART и DMA
HAL_UART_DMAStop(huart);
// Очищаем флаги всех возможных ошибок
__HAL_UART_CLEAR_FEFLAG(huart); // Сброс ошибки кадра
__HAL_UART_CLEAR_PEFLAG(huart); // Сброс ошибки четности
__HAL_UART_CLEAR_NEFLAG(huart); // Сброс ошибки шума
__HAL_UART_CLEAR_OREFLAG(huart); // Сброс ошибки переполнения
// Проверка, не повторяется ли ошибка через несколько циклов
static int error_count = 0;
error_count++;
if (error_count > 1)
{
NVIC_SystemReset(); // Полный перезапуск системы после n ошибок
}
// Деинициализация и повторная инициализация UART
HAL_UART_DeInit(huart);
HAL_UART_Init(huart);
// Перезапуск DMA
HAL_UART_Receive_DMA(huart, uart_rx_buffer, UART_BUFFER_SIZE);
// Логгирование состояния после перезапуска
snprintf(error_msg, sizeof(error_msg),
"UART3 DMA reception restarted: DMA Counter = %lu\n",
__HAL_DMA_GET_COUNTER(&hdma_usart3_rx));
CDC_Transmit_FS((uint8_t*) error_msg, strlen(error_msg));
}
}
uint8_t rx_in_progress = 0;
void UART3_Handler() {
uint32_t pos = UART_BUFFER_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart3_rx);
@ -243,9 +285,6 @@ void UART3_CMD_Handler(uint8_t *dataPtr, uint8_t len) {
case 200:
UART3_SetServoOffset(dataPtr, len);
break;
case 204:
UART3_GetServoOffset(dataPtr, len);
break;
case 201:
UART3_SetServoMaxAngle(dataPtr, len);
break;
@ -255,6 +294,12 @@ void UART3_CMD_Handler(uint8_t *dataPtr, uint8_t len) {
case 203:
UART3_MoveServoToInitialPosition(dataPtr, len);
break;
// case 204:
// UART3_GetServoOffset(dataPtr, len);
// break;
case 205:
UART3_GetServoOffset(dataPtr, len);
break;
case 206:
UART3_SetStartupDelay(dataPtr, len);
break;