diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 44298d4..50b412a 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -304,7 +304,8 @@ void EXTI15_10_IRQHandler(void) void UART5_IRQHandler(void) { /* USER CODE BEGIN UART5_IRQn 0 */ - +#include "bsp/uart.h" + BSP_UART_IRQHandler(&huart5); /* USER CODE END UART5_IRQn 0 */ HAL_UART_IRQHandler(&huart5); /* USER CODE BEGIN UART5_IRQn 1 */ @@ -360,7 +361,8 @@ void DMA2_Stream5_IRQHandler(void) void USART10_IRQHandler(void) { /* USER CODE BEGIN USART10_IRQn 0 */ - +#include "bsp/uart.h" + BSP_UART_IRQHandler(&huart10); /* USER CODE END USART10_IRQn 0 */ HAL_UART_IRQHandler(&huart10); /* USER CODE BEGIN USART10_IRQn 1 */ diff --git a/User/device/dr16.c b/User/device/dr16.c index b13deb2..1303171 100644 --- a/User/device/dr16.c +++ b/User/device/dr16.c @@ -155,6 +155,16 @@ bool DR16_WaitDmaCplt(uint32_t timeout) { int8_t DR16_ParseData(DR16_t *dr16){ if (dr16 == NULL) return DEVICE_ERR_NULL; + // STM32H7 D-Cache一致性处理:使DMA接收的数据对CPU可见 + // D-Cache按32字节对齐,需要对齐处理 + uint32_t addr = (uint32_t)&(dr16->raw_data); + uint32_t size = sizeof(dr16->raw_data); + // 向下对齐到32字节边界 + uint32_t aligned_addr = addr & ~0x1FU; + // 计算对齐后的大小 + uint32_t aligned_size = ((size + (addr - aligned_addr) + 31) & ~0x1FU); + SCB_InvalidateDCache_by_Addr((uint32_t *)aligned_addr, aligned_size); + if (DR16_DataCorrupted(dr16)) { /* 数据损坏说明帧错位了,重启串口并重新同步 */ DR16_Restart(); diff --git a/User/task/user_task.h b/User/task/user_task.h index 022dfd3..27d88c8 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -25,7 +25,7 @@ extern "C" { #define REFEREE_FREQ (500.0) /* 任务初始化延时ms */ #define TASK_INIT_DELAY (100u) -#define RC_INIT_DELAY (0) +#define RC_INIT_DELAY (500) #define ATTI_ESTI_INIT_DELAY (0) #define BLINK_INIT_DELAY (0) #define CTRL_CHASSIS_INIT_DELAY (0)