Fix DR16 cache invalidation and UART IRQ hooking

This commit is contained in:
xxxxm 2026-03-17 08:41:41 +08:00
parent dd7994b0b0
commit acecad0555
3 changed files with 15 additions and 3 deletions

View File

@ -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 */

View File

@ -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();

View File

@ -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)