mirror of
https://github.com/DashyFox/StackSport.git
synced 2025-06-28 05:09:32 +00:00
shooting process
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user