From 1ff64dea825f8b46ba54917154c1dec66eae082d Mon Sep 17 00:00:00 2001 From: TuxMonkey <8196772+tuxmonkey@user.noreply.gitee.com> Date: Thu, 20 Nov 2025 19:26:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- User_Code/bsp/fdcan/bsp_fdcan.c | 2 +- User_Code/bsp/gpio/bsp_gpio.c | 2 +- User_Code/bsp/spi/bsp_spi.c | 2 +- User_Code/module/algorithm/kalman/kalman_filter.c | 2 ++ User_Code/module/periph/imu/BMI088/BMI088driver.c | 4 ++++ User_Code/module/periph/imu/ins_task.c | 8 ++++++++ .../module/periph/power_meters/xiditech/xidipwmeter.c | 4 ++-- 7 files changed, 19 insertions(+), 5 deletions(-) diff --git a/User_Code/bsp/fdcan/bsp_fdcan.c b/User_Code/bsp/fdcan/bsp_fdcan.c index cc427e7..134ce8b 100644 --- a/User_Code/bsp/fdcan/bsp_fdcan.c +++ b/User_Code/bsp/fdcan/bsp_fdcan.c @@ -165,7 +165,7 @@ FDCANInstance *FDCANRegister(FDCAN_Init_Config_s *config) } } - FDCANInstance *instance = (FDCANInstance *) malloc(sizeof(FDCANInstance)); // 分配空间 + auto instance = (FDCANInstance *) malloc(sizeof(FDCANInstance)); // 分配空间 memset(instance, 0, sizeof(FDCANInstance)); // 分配的空间未必是0,所以要先清空 // 进行发送报文的配置 diff --git a/User_Code/bsp/gpio/bsp_gpio.c b/User_Code/bsp/gpio/bsp_gpio.c index c649978..09ddd36 100644 --- a/User_Code/bsp/gpio/bsp_gpio.c +++ b/User_Code/bsp/gpio/bsp_gpio.c @@ -29,7 +29,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) GPIOInstance *GPIORegister(GPIO_Init_Config_s *GPIO_config) { - GPIOInstance *ins = (GPIOInstance *) malloc(sizeof(GPIOInstance)); + auto ins = (GPIOInstance *) malloc(sizeof(GPIOInstance)); memset(ins, 0, sizeof(GPIOInstance)); ins->GPIOx = GPIO_config->GPIOx; diff --git a/User_Code/bsp/spi/bsp_spi.c b/User_Code/bsp/spi/bsp_spi.c index f99e1ed..6f3a72d 100644 --- a/User_Code/bsp/spi/bsp_spi.c +++ b/User_Code/bsp/spi/bsp_spi.c @@ -10,7 +10,7 @@ SPIInstance *SPIRegister(SPI_Init_Config_s *conf) { if (idx >= MX_SPI_BUS_SLAVE_CNT) // 超过最大实例数 while (1); - SPIInstance *instance = (SPIInstance *) malloc(sizeof(SPIInstance)); + auto instance = (SPIInstance *) malloc(sizeof(SPIInstance)); memset(instance, 0, sizeof(SPIInstance)); instance->spi_handle = conf->spi_handle; diff --git a/User_Code/module/algorithm/kalman/kalman_filter.c b/User_Code/module/algorithm/kalman/kalman_filter.c index c7cf411..3c3d74b 100644 --- a/User_Code/module/algorithm/kalman/kalman_filter.c +++ b/User_Code/module/algorithm/kalman/kalman_filter.c @@ -266,7 +266,9 @@ void Kalman_Filter_Measure(KalmanFilter_t *kf) // 矩阵H K R根据量测情况自动调整 // matrix H K R auto adjustment if (kf->UseAutoAdjustment != 0) + { H_K_R_Adjustment(kf); + } else { memcpy(kf->z_data, kf->MeasuredVector, sizeof_float * kf->zSize); diff --git a/User_Code/module/periph/imu/BMI088/BMI088driver.c b/User_Code/module/periph/imu/BMI088/BMI088driver.c index 80f8f22..9bec0e6 100644 --- a/User_Code/module/periph/imu/BMI088/BMI088driver.c +++ b/User_Code/module/periph/imu/BMI088/BMI088driver.c @@ -205,7 +205,9 @@ void Calibrate_MPU_Offset(IMU_Data_t *bmi088) gNormDiff = gNormMax - gNormMin; for (uint8_t j = 0; j < 3; ++j) + { gyroDiff[j] = gyroMax[j] - gyroMin[j]; + } if (gNormDiff > 0.5f || gyroDiff[0] > 0.5f || //0.15 gyroDiff[1] > 0.5f || //0.15 @@ -220,7 +222,9 @@ void Calibrate_MPU_Offset(IMU_Data_t *bmi088) bmi088->gNorm /= (float) CaliTimes; for (uint8_t i = 0; i < 3; ++i) + { bmi088->GyroOffset[i] /= (float) CaliTimes; + } BMI088_accel_read_muli_reg(BMI088_TEMP_M, buf, 2); bmi088_raw_temp = (int16_t) ((buf[0] << 3) | (buf[1] >> 5)); diff --git a/User_Code/module/periph/imu/ins_task.c b/User_Code/module/periph/imu/ins_task.c index 56bec96..476527d 100644 --- a/User_Code/module/periph/imu/ins_task.c +++ b/User_Code/module/periph/imu/ins_task.c @@ -67,7 +67,9 @@ static void InitQuaternion(float *init_q4) DWT_Delay(0.001); } for (uint8_t i = 0; i < 3; ++i) + { acc_init[i] /= 100; + } Norm3d(acc_init); // 计算原始加速度矢量和导航系重力加速度矢量的夹角 float angle = acosf(Dot3d(acc_init, gravity_norm)); @@ -75,7 +77,9 @@ static void InitQuaternion(float *init_q4) Norm3d(axis_rot); init_q4[0] = cosf(angle / 2.0f); for (uint8_t i = 0; i < 2; ++i) + { init_q4[i + 1] = axis_rot[i] * sinf(angle / 2.0f); // 轴角公式,第三轴为0(没有z轴分量) + } } attitude_t *INS_Init(void) @@ -265,7 +269,9 @@ static void IMU_Param_Correction(IMU_Param_t *param, float gyro[3], float accel[ } float gyro_temp[3]; for (uint8_t i = 0; i < 3; ++i) + { gyro_temp[i] = gyro[i] * param->scale[i]; + } gyro[X] = c_11 * gyro_temp[X] + c_12 * gyro_temp[Y] + @@ -279,7 +285,9 @@ static void IMU_Param_Correction(IMU_Param_t *param, float gyro[3], float accel[ float accel_temp[3]; for (uint8_t i = 0; i < 3; ++i) + { accel_temp[i] = accel[i]; + } accel[X] = c_11 * accel_temp[X] + c_12 * accel_temp[Y] + diff --git a/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c b/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c index 43409be..31b0cd4 100644 --- a/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c +++ b/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c @@ -38,11 +38,11 @@ void PowerMeterDecode(FDCANInstance *instance) measure->dt = DWT_GetDeltaT(&power_meter_instance->feed_cnt); // 解析电流数据 (放大100倍,需要除以100) - int16_t current_raw = (int16_t) ((rxbuff[1] << 8) | rxbuff[0]); + auto current_raw = (int16_t) ((rxbuff[1] << 8) | rxbuff[0]); measure->current = (float) current_raw / 100.0f; // 解析电压数据 (放大100倍,需要除以100) - int16_t voltage_raw = (int16_t) ((rxbuff[3] << 8) | rxbuff[2]); + auto voltage_raw = (int16_t) ((rxbuff[3] << 8) | rxbuff[2]); measure->voltage = (float) voltage_raw / 100.0f; // 计算功率