Correct spi chip selection

This commit is contained in:
chenfu
2023-12-23 11:09:36 +08:00
parent b052126648
commit 9dd0057563
8 changed files with 125 additions and 110 deletions

View File

@@ -50,48 +50,48 @@ BMI088Instance *bmi088_test; // 云台IMU
BMI088_Data_t bmi088_data;
void RobotCMDInit()
{
BMI088_Init_Config_s bmi088_config = {
.cali_mode = BMI088_CALIBRATE_ONLINE_MODE,
.work_mode = BMI088_BLOCK_TRIGGER_MODE,
.spi_acc_config = {
.spi_handle = &hspi1,
.GPIOx = GPIOA,
.cs_pin = GPIO_PIN_4,
.spi_work_mode = SPI_DMA_MODE,
},
.acc_int_config = {
.GPIOx = GPIOC,
.GPIO_Pin = GPIO_PIN_4,
.exti_mode = GPIO_EXTI_MODE_RISING,
},
.spi_gyro_config = {
.spi_handle = &hspi1,
.GPIOx = GPIOB,
.cs_pin = GPIO_PIN_0,
.spi_work_mode = SPI_DMA_MODE,
},
.gyro_int_config = {
.GPIO_Pin = GPIO_PIN_5,
.GPIOx = GPIOC,
.exti_mode = GPIO_EXTI_MODE_RISING,
},
.heat_pwm_config = {
.htim = &htim10,
.channel = TIM_CHANNEL_1,
.period = 1,
},
.heat_pid_config = {
.Kp = 0.5,
.Ki = 0,
.Kd = 0,
.DeadBand = 0.1,
.Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement,
.IntegralLimit = 100,
.MaxOut = 100,
},
};
bmi088_test = BMI088Register(&bmi088_config);
rc_data = RemoteControlInit(&huart3); // 修改为对应串口,注意如果是自研板dbus协议串口需选用添加了反相器的那个
// BMI088_Init_Config_s bmi088_config = {
// .cali_mode = BMI088_CALIBRATE_ONLINE_MODE,
// .work_mode = BMI088_BLOCK_TRIGGER_MODE,
// .spi_acc_config = {
// .spi_handle = &hspi1,
// .GPIOx = GPIOA,
// .cs_pin = GPIO_PIN_4,
// .spi_work_mode = SPI_DMA_MODE,
// },
// .acc_int_config = {
// .GPIOx = GPIOC,
// .GPIO_Pin = GPIO_PIN_4,
// .exti_mode = GPIO_EXTI_MODE_RISING,
// },
// .spi_gyro_config = {
// .spi_handle = &hspi1,
// .GPIOx = GPIOB,
// .cs_pin = GPIO_PIN_0,
// .spi_work_mode = SPI_DMA_MODE,
// },
// .gyro_int_config = {
// .GPIO_Pin = GPIO_PIN_5,
// .GPIOx = GPIOC,
// .exti_mode = GPIO_EXTI_MODE_RISING,
// },
// .heat_pwm_config = {
// .htim = &htim10,
// .channel = TIM_CHANNEL_1,
// .period = 1,
// },
// .heat_pid_config = {
// .Kp = 0.5,
// .Ki = 0,
// .Kd = 0,
// .DeadBand = 0.1,
// .Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement,
// .IntegralLimit = 100,
// .MaxOut = 100,
// },
// };
//bmi088_test = BMI088Register(&bmi088_config);
rc_data = RemoteControlInit(&huart3); // 修改为对应串口,注意如果是自研板dbus协议串口需选用添加了反相器的那个
vision_recv_data = VisionInit(&huart1); // 视觉通信串口
gimbal_cmd_pub = PubRegister("gimbal_cmd", sizeof(Gimbal_Ctrl_Cmd_s));
@@ -319,7 +319,7 @@ static void EmergencyHandler()
/* 机器人核心控制任务,200Hz频率运行(必须高于视觉发送频率) */
void RobotCMDTask()
{
BMI088Acquire(bmi088_test,&bmi088_data) ;
// BMI088Acquire(bmi088_test,&bmi088_data) ;
// 从其他应用获取回传数据
#ifdef ONE_BOARD
SubGetMessage(chassis_feed_sub, (void *)&chassis_fetch_data);

View File

@@ -17,29 +17,7 @@ static Gimbal_Ctrl_Cmd_s gimbal_cmd_recv; // 来自cmd的控制信息
static BMI088Instance *bmi088; // 云台IMU
void GimbalInit()
{
//gimba_IMU_data = INS_Init(); // IMU先初始化,获取姿态数据指针赋给yaw电机的其他数据来源
BMI088_Init_Config_s imu_config = {
.work_mode = BMI088_BLOCK_PERIODIC_MODE,
.spi_acc_config = {
.spi_handle = &hspi1,
.GPIOx = GPIOA,
.cs_pin = GPIO_PIN_4,
.spi_work_mode = SPI_BLOCK_MODE,
},
.spi_gyro_config = {
.spi_handle = &hspi1,
.GPIOx = GPIOA,
.cs_pin = GPIO_PIN_4,
.spi_work_mode = SPI_BLOCK_MODE,
},
.heat_pwm_config = {
.htim = &htim10,
.channel = TIM_CHANNEL_1,
.period = 1,
}
};
bmi088=BMI088Register(&imu_config);
gimba_IMU_data = INS_Init(); // IMU先初始化,获取姿态数据指针赋给yaw电机的其他数据来源
// YAW
Motor_Init_Config_s yaw_config = {
.can_init_config = {

View File

@@ -31,12 +31,12 @@ void RobotInit()
#if defined(ONE_BOARD) || defined(GIMBAL_BOARD)
RobotCMDInit();
//GimbalInit();
//ShootInit();
GimbalInit();
ShootInit();
#endif
#if defined(ONE_BOARD) || defined(CHASSIS_BOARD)
//ChassisInit();
ChassisInit();
#endif
OSTaskInit(); // 创建基础任务
@@ -49,12 +49,12 @@ void RobotTask()
{
#if defined(ONE_BOARD) || defined(GIMBAL_BOARD)
RobotCMDTask();
//GimbalTask();
//ShootTask();
GimbalTask();
ShootTask();
#endif
#if defined(ONE_BOARD) || defined(CHASSIS_BOARD)
//ChassisTask();
ChassisTask();
#endif
}

View File

@@ -17,13 +17,13 @@
#include "bsp_log.h"
// osThreadId insTaskHandle;
osThreadId insTaskHandle;
osThreadId robotTaskHandle;
osThreadId motorTaskHandle;
osThreadId daemonTaskHandle;
osThreadId uiTaskHandle;
// void StartINSTASK(void const *argument);
void StartINSTASK(void const *argument);
void StartMOTORTASK(void const *argument);
void StartDAEMONTASK(void const *argument);
void StartROBOTTASK(void const *argument);
@@ -35,8 +35,8 @@ void StartUITASK(void const *argument);
*/
void OSTaskInit()
{
// osThreadDef(instask, StartINSTASK, osPriorityAboveNormal, 0, 1024);
// insTaskHandle = osThreadCreate(osThread(instask), NULL); // 由于是阻塞读取传感器,为姿态解算设置较高优先级,确保以1khz的频率执行
osThreadDef(instask, StartINSTASK, osPriorityAboveNormal, 0, 1024);
insTaskHandle = osThreadCreate(osThread(instask), NULL); // 由于是阻塞读取传感器,为姿态解算设置较高优先级,确保以1khz的频率执行
// // 后续修改为读取传感器数据准备好的中断处理,
osThreadDef(motortask, StartMOTORTASK, osPriorityNormal, 0, 256);
@@ -54,24 +54,24 @@ void OSTaskInit()
HTMotorControlInit(); // 没有注册HT电机则不会执行
}
// __attribute__((noreturn)) void StartINSTASK(void const *argument)
// {
// static float ins_start;
// static float ins_dt;
// INS_Init(); // 确保BMI088被正确初始化.
// LOGINFO("[freeRTOS] INS Task Start");
// for (;;)
// {
// // 1kHz
// ins_start = DWT_GetTimeline_ms();
// //INS_Task();
// ins_dt = DWT_GetTimeline_ms() - ins_start;
// if (ins_dt > 1)
// LOGERROR("[freeRTOS] INS Task is being DELAY! dt = [%f]", &ins_dt);
// VisionSend(); // 解算完成后发送视觉数据,但是当前的实现不太优雅,后续若添加硬件触发需要重新考虑结构的组织
// osDelay(1);
// }
// }
__attribute__((noreturn)) void StartINSTASK(void const *argument)
{
static float ins_start;
static float ins_dt;
INS_Init(); // 确保BMI088被正确初始化.
LOGINFO("[freeRTOS] INS Task Start");
for (;;)
{
// 1kHz
ins_start = DWT_GetTimeline_ms();
INS_Task();
ins_dt = DWT_GetTimeline_ms() - ins_start;
if (ins_dt > 1)
LOGERROR("[freeRTOS] INS Task is being DELAY! dt = [%f]", &ins_dt);
VisionSend(); // 解算完成后发送视觉数据,但是当前的实现不太优雅,后续若添加硬件触发需要重新考虑结构的组织
osDelay(1);
}
}
__attribute__((noreturn)) void StartMOTORTASK(void const *argument)
{