Compare commits
3 Commits
dd7994b0b0
...
0e087f0112
| Author | SHA1 | Date | |
|---|---|---|---|
| 0e087f0112 | |||
| 3304c05382 | |||
| acecad0555 |
@ -54,6 +54,7 @@ void UsageFault_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void DMA1_Stream0_IRQHandler(void);
|
||||
void DMA1_Stream1_IRQHandler(void);
|
||||
void DMA1_Stream3_IRQHandler(void);
|
||||
void FDCAN1_IT0_IRQHandler(void);
|
||||
void FDCAN2_IT0_IRQHandler(void);
|
||||
void FDCAN1_IT1_IRQHandler(void);
|
||||
@ -64,7 +65,6 @@ void EXTI15_10_IRQHandler(void);
|
||||
void UART5_IRQHandler(void);
|
||||
void DMA2_Stream1_IRQHandler(void);
|
||||
void DMA2_Stream2_IRQHandler(void);
|
||||
void DMA2_Stream5_IRQHandler(void);
|
||||
void USART10_IRQHandler(void);
|
||||
void FDCAN3_IT0_IRQHandler(void);
|
||||
void FDCAN3_IT1_IRQHandler(void);
|
||||
|
||||
@ -50,15 +50,15 @@ void MX_DMA_Init(void)
|
||||
/* DMA1_Stream1_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
|
||||
/* DMA1_Stream3_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
|
||||
/* DMA2_Stream1_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
|
||||
/* DMA2_Stream2_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
|
||||
HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
|
||||
/* DMA2_Stream5_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA2_Stream5_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA2_Stream5_IRQn);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -198,6 +198,20 @@ void DMA1_Stream1_IRQHandler(void)
|
||||
/* USER CODE END DMA1_Stream1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles DMA1 stream3 global interrupt.
|
||||
*/
|
||||
void DMA1_Stream3_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DMA1_Stream3_IRQn 0 */
|
||||
|
||||
/* USER CODE END DMA1_Stream3_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_uart5_rx);
|
||||
/* USER CODE BEGIN DMA1_Stream3_IRQn 1 */
|
||||
|
||||
/* USER CODE END DMA1_Stream3_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles FDCAN1 interrupt 0.
|
||||
*/
|
||||
@ -304,7 +318,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 */
|
||||
@ -340,20 +355,6 @@ void DMA2_Stream2_IRQHandler(void)
|
||||
/* USER CODE END DMA2_Stream2_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles DMA2 stream5 global interrupt.
|
||||
*/
|
||||
void DMA2_Stream5_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DMA2_Stream5_IRQn 0 */
|
||||
|
||||
/* USER CODE END DMA2_Stream5_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_uart5_rx);
|
||||
/* USER CODE BEGIN DMA2_Stream5_IRQn 1 */
|
||||
|
||||
/* USER CODE END DMA2_Stream5_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USART10 global interrupt.
|
||||
*/
|
||||
|
||||
@ -46,7 +46,7 @@ void MX_UART5_Init(void)
|
||||
huart5.Init.WordLength = UART_WORDLENGTH_9B;
|
||||
huart5.Init.StopBits = UART_STOPBITS_1;
|
||||
huart5.Init.Parity = UART_PARITY_EVEN;
|
||||
huart5.Init.Mode = UART_MODE_TX_RX;
|
||||
huart5.Init.Mode = UART_MODE_RX;
|
||||
huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart5.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
huart5.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
@ -163,7 +163,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
||||
|
||||
/* UART5 DMA Init */
|
||||
/* UART5_RX Init */
|
||||
hdma_uart5_rx.Instance = DMA2_Stream5;
|
||||
hdma_uart5_rx.Instance = DMA1_Stream3;
|
||||
hdma_uart5_rx.Init.Request = DMA_REQUEST_UART5_RX;
|
||||
hdma_uart5_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||
hdma_uart5_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
|
||||
@ -38,6 +38,18 @@ const Tone_t NOKIA[] = {
|
||||
{NOTE_B, 4, 125}, {NOTE_A, 4, 125}, {NOTE_CS, 4, 250}, {NOTE_E, 4, 250},
|
||||
{NOTE_A, 4, 500}
|
||||
};
|
||||
|
||||
// 蔡徐坤 - 只因你太美(副歌高潮段落)
|
||||
const Tone_t JNTM[] = {
|
||||
{NOTE_E, 5, 150}, {NOTE_D, 5, 150}, {NOTE_E, 5, 150}, {NOTE_C, 5, 150}, {NOTE_D, 5, 300}, // 只 因 你 太 美
|
||||
{NOTE_C, 5, 150}, {NOTE_A, 4, 300}, {NOTE_REST, 0, 150}, // ba by ~
|
||||
{NOTE_E, 5, 150}, {NOTE_D, 5, 150}, {NOTE_E, 5, 150}, {NOTE_C, 5, 150}, {NOTE_D, 5, 300}, // 只 因 你 太 美
|
||||
{NOTE_C, 5, 150}, {NOTE_A, 4, 300}, {NOTE_REST, 0, 150}, // ba by ~
|
||||
{NOTE_E, 5, 150}, {NOTE_D, 5, 150}, {NOTE_E, 5, 150}, {NOTE_C, 5, 150}, // 只 因 你 实
|
||||
{NOTE_D, 5, 150}, {NOTE_E, 5, 150}, {NOTE_D, 5, 150}, {NOTE_C, 5, 150}, {NOTE_D, 5, 300}, // 在 是 太 美
|
||||
{NOTE_C, 5, 150}, {NOTE_A, 4, 300}, {NOTE_REST, 0, 150}, // ba by ~
|
||||
{NOTE_E, 5, 150}, {NOTE_D, 5, 150}, {NOTE_E, 5, 150}, {NOTE_C, 5, 150}, {NOTE_D, 5, 500} // 只 因 你 太 美 ~
|
||||
};
|
||||
/* USER MUSIC MENU END */
|
||||
|
||||
static void BUZZER_Update(BUZZER_t *buzzer){
|
||||
@ -149,6 +161,10 @@ int8_t BUZZER_PlayMusic(BUZZER_t *buzzer, MUSIC_t music) {
|
||||
melody = NOKIA;
|
||||
melody_length = sizeof(NOKIA) / sizeof(Tone_t);
|
||||
break;
|
||||
case MUSIC_JNTM:
|
||||
melody = JNTM;
|
||||
melody_length = sizeof(JNTM) / sizeof(Tone_t);
|
||||
break;
|
||||
default:
|
||||
return DEVICE_ERR;
|
||||
}
|
||||
|
||||
@ -68,6 +68,7 @@ typedef enum {
|
||||
/* USER MUSIC MENU BEGIN */
|
||||
MUSIC_RM, ///< RM战队音乐
|
||||
MUSIC_NOKIA, ///< 诺基亚经典铃声
|
||||
MUSIC_JNTM, ///< 只因你太美
|
||||
/* USER MUSIC MENU END */
|
||||
} MUSIC_t;
|
||||
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
#define DR16_CH_VALUE_MIN (364u)
|
||||
#define DR16_CH_VALUE_MID (1024u)
|
||||
#define DR16_CH_VALUE_MAX (1684u)
|
||||
//#define DR16_FRAME_SIZE (18u) // DR16数据帧固定18字节
|
||||
|
||||
/* USER DEFINE BEGIN */
|
||||
|
||||
@ -41,25 +42,29 @@
|
||||
|
||||
static osThreadId_t thread_alert;
|
||||
static bool inited = false;
|
||||
static DR16_t *dr16_instance = NULL; /* 用于空闲中断回调中访问实例 */
|
||||
static uint8_t sync_buf[32]; /* 帧同步时的丢弃缓冲区 */
|
||||
|
||||
/* Private function -------------------------------------------------------- */
|
||||
static void DR16_RxCpltCallback(void) {
|
||||
osThreadFlagsSet(thread_alert, SIGNAL_DR16_RAW_REDY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 空闲中断回调 - 用于帧同步
|
||||
* 空闲中断表示一帧传输结束(总线空闲),此时停止当前DMA接收,
|
||||
* 丢弃不完整的数据,这样下一次 StartDmaRecv 就能从帧头开始。
|
||||
*/
|
||||
static void DR16_IdleCallback(void) {
|
||||
/* 停止当前DMA接收(无论收了多少字节) */
|
||||
HAL_UART_AbortReceive(BSP_UART_GetHandle(BSP_UART_RC));
|
||||
/* 通知任务:可以启动下一次对齐的接收了 */
|
||||
osThreadFlagsSet(thread_alert, SIGNAL_DR16_RAW_REDY);
|
||||
}
|
||||
//static void DR16_ErrorCallback(void) {
|
||||
// UART_HandleTypeDef *huart = BSP_UART_GetHandle(BSP_UART_RC);
|
||||
//
|
||||
// // 清除所有错误标志(包括FIFO错误)
|
||||
// __HAL_UART_CLEAR_OREFLAG(huart);
|
||||
// __HAL_UART_CLEAR_NEFLAG(huart);
|
||||
// __HAL_UART_CLEAR_FEFLAG(huart);
|
||||
// __HAL_UART_CLEAR_PEFLAG(huart);
|
||||
//
|
||||
// // 清除FIFO超时标志(STM32H7特有)
|
||||
// if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF)) {
|
||||
// __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
|
||||
// }
|
||||
//
|
||||
// // 中止并清除当前DMA传输
|
||||
// HAL_UART_AbortReceive(huart);
|
||||
//}
|
||||
|
||||
static bool DR16_DataCorrupted(const DR16_t *dr16) {
|
||||
if (dr16 == NULL) return DEVICE_ERR_NULL;
|
||||
@ -93,57 +98,47 @@ int8_t DR16_Init(DR16_t *dr16) {
|
||||
if (inited) return DEVICE_ERR_INITED;
|
||||
if ((thread_alert = osThreadGetId()) == NULL) return DEVICE_ERR_NULL;
|
||||
|
||||
dr16_instance = dr16;
|
||||
// // 清零结构体
|
||||
// memset(dr16, 0, sizeof(DR16_t));
|
||||
|
||||
/* 注册 DMA 接收完成回调 */
|
||||
BSP_UART_RegisterCallback(BSP_UART_RC, BSP_UART_RX_CPLT_CB,
|
||||
DR16_RxCpltCallback);
|
||||
|
||||
/* 注册空闲中断回调并使能空闲中断,用于帧同步 */
|
||||
BSP_UART_RegisterCallback(BSP_UART_RC, BSP_UART_IDLE_LINE_CB,
|
||||
DR16_IdleCallback);
|
||||
__HAL_UART_ENABLE_IT(BSP_UART_GetHandle(BSP_UART_RC), UART_IT_IDLE);
|
||||
|
||||
/*
|
||||
* 首次帧同步:启动一次丢弃式DMA接收。
|
||||
* 如果遥控器已经在发送,DMA会从帧中间开始收,空闲中断到来时
|
||||
* IdleCallback 会 Abort 这次接收并通知任务,下一次 StartDmaRecv
|
||||
* 就能从完整帧头开始。
|
||||
*/
|
||||
HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_RC),
|
||||
sync_buf, sizeof(sync_buf));
|
||||
/* 等待空闲中断完成首次同步(最多50ms,足够等一帧) */
|
||||
osThreadFlagsWait(SIGNAL_DR16_RAW_REDY, osFlagsWaitAll, 50);
|
||||
// BSP_UART_RegisterCallback(BSP_UART_RC, BSP_UART_ERROR_CB,
|
||||
// DR16_ErrorCallback);
|
||||
|
||||
inited = true;
|
||||
return DEVICE_OK;
|
||||
}
|
||||
|
||||
int8_t DR16_Restart(void) {
|
||||
UART_HandleTypeDef *huart = BSP_UART_GetHandle(BSP_UART_RC);
|
||||
|
||||
/* 先终止当前DMA接收 */
|
||||
HAL_UART_AbortReceive(huart);
|
||||
|
||||
/* 重置串口 */
|
||||
__HAL_UART_DISABLE(huart);
|
||||
__HAL_UART_ENABLE(huart);
|
||||
|
||||
/* 重新使能空闲中断 */
|
||||
__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE);
|
||||
|
||||
/* 重新做帧同步:丢弃式接收,等空闲中断对齐 */
|
||||
HAL_UART_Receive_DMA(huart, sync_buf, sizeof(sync_buf));
|
||||
osThreadFlagsWait(SIGNAL_DR16_RAW_REDY, osFlagsWaitAll, 50);
|
||||
|
||||
__HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_RC));
|
||||
__HAL_UART_ENABLE(BSP_UART_GetHandle(BSP_UART_RC));
|
||||
return DEVICE_OK;
|
||||
}
|
||||
|
||||
int8_t DR16_StartDmaRecv(DR16_t *dr16) {
|
||||
if (HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_RC),
|
||||
(uint8_t *)&(dr16->raw_data),
|
||||
UART_HandleTypeDef *huart = BSP_UART_GetHandle(BSP_UART_RC);
|
||||
|
||||
// // 确保之前的DMA接收已停止
|
||||
// if (huart->RxState != HAL_UART_STATE_READY) {
|
||||
// HAL_UART_AbortReceive(huart);
|
||||
// }
|
||||
//
|
||||
// // 清除所有可能的错误标志和IDLE标志
|
||||
// __HAL_UART_CLEAR_OREFLAG(huart);
|
||||
// __HAL_UART_CLEAR_NEFLAG(huart);
|
||||
// __HAL_UART_CLEAR_FEFLAG(huart);
|
||||
// __HAL_UART_CLEAR_PEFLAG(huart);
|
||||
// __HAL_UART_CLEAR_IDLEFLAG(huart);
|
||||
//
|
||||
// // 清除FIFO超时标志
|
||||
// if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF)) {
|
||||
// __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
|
||||
// }
|
||||
|
||||
if (HAL_UART_Receive_DMA(huart, (uint8_t *)&(dr16->raw_data),
|
||||
sizeof(dr16->raw_data)) == HAL_OK)
|
||||
return DEVICE_OK;
|
||||
return DEVICE_OK;
|
||||
return DEVICE_ERR;
|
||||
}
|
||||
|
||||
@ -155,9 +150,17 @@ 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();
|
||||
return DEVICE_ERR;
|
||||
}
|
||||
|
||||
|
||||
@ -91,9 +91,10 @@ int8_t Aimbot_Init(Aimbot_Param_t *param) {
|
||||
BSP_FDCAN_Init();
|
||||
|
||||
/* 注册 AI 指令帧队列(下层板接收/上层板发送) */
|
||||
BSP_FDCAN_RegisterId(param->can, param->cmd_id,
|
||||
BSP_FDCAN_DEFAULT_QUEUE_SIZE);
|
||||
|
||||
for (uint8_t i = 0; i < 3; i++) {
|
||||
BSP_FDCAN_RegisterId(param->can, param->cmd_id + i,
|
||||
10);
|
||||
}
|
||||
/* 注册反馈数据帧队列(上层板接收/下层板发送) */
|
||||
for (uint8_t i = 0; i < AIMBOT_FB_FRAME_NUM; i++) {
|
||||
BSP_FDCAN_RegisterId(param->can, param->fb_base_id + i,
|
||||
|
||||
@ -41,7 +41,7 @@ void Task(void *argument) {
|
||||
/* Private typedef ---------------------------------------------------------- */
|
||||
/* Private define ----------------------------------------------------------- */
|
||||
#define MAX_FRIC_RPM 7000.0f
|
||||
#define MAX_TRIG_RPM 4000.0f//这里可能也会影响最高发射频率,待测试
|
||||
#define MAX_TRIG_RPM 2500.0f//这里可能也会影响最高发射频率,待测试
|
||||
|
||||
/* 发射检测参数 */
|
||||
#define SHOT_DETECT_RPM_DROP_THRESHOLD 100.0f /* 摩擦轮转速下降阈值,单位rpm */
|
||||
@ -52,7 +52,7 @@ void Task(void *argument) {
|
||||
/* Private variables -------------------------------------------------------- */
|
||||
static bool last_firecmd;
|
||||
|
||||
float maxTrigrpm=4000.0f;
|
||||
|
||||
/* Private function -------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
@ -183,8 +183,8 @@ int8_t Shoot_CaluTargetRPM(Shoot_t *s, float target_speed)
|
||||
s->target_variable.fric_rpm=5000.0f;
|
||||
break;
|
||||
case SHOOT_PROJECTILE_42MM:
|
||||
s->target_variable.fric_rpm=5000.0f;//6500
|
||||
break;
|
||||
s->target_variable.fric_rpm=4000.0f;//6500
|
||||
break;
|
||||
}
|
||||
return SHOOT_OK;
|
||||
}
|
||||
@ -201,6 +201,12 @@ static int8_t Shoot_UpdateHeatControl(Shoot_t *s)
|
||||
if (s == NULL) {
|
||||
return SHOOT_ERR_NULL;
|
||||
}
|
||||
|
||||
if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) {
|
||||
s->heatcontrol.Hres = 0.0f;
|
||||
s->heatcontrol.ncd = s->param->basic.shot_freq;
|
||||
return SHOOT_OK;
|
||||
}
|
||||
|
||||
/* 使用融合后的热量值计算剩余热量 */
|
||||
s->heatcontrol.Hres = s->heatcontrol.Hmax - s->heatcontrol.Hnow_fused;
|
||||
@ -287,6 +293,10 @@ static int8_t Shoot_FuseHeatData(Shoot_t *s)
|
||||
if (s == NULL) {
|
||||
return SHOOT_ERR_NULL;
|
||||
}
|
||||
|
||||
if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) {
|
||||
return SHOOT_OK;
|
||||
}
|
||||
|
||||
/* 如果裁判系统数据有效(Hmax > 0) */
|
||||
if (s->heatcontrol.Hmax > 0.0f && s->heatcontrol.Hnow >= 0.0f) {
|
||||
@ -319,6 +329,11 @@ static int8_t Shoot_CalcAvailableShots(Shoot_t *s)
|
||||
if (s == NULL) {
|
||||
return SHOOT_ERR_NULL;
|
||||
}
|
||||
|
||||
if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) {
|
||||
s->heatcontrol.shots_available = UINT16_MAX;
|
||||
return SHOOT_OK;
|
||||
}
|
||||
|
||||
/* 计算剩余热量 */
|
||||
float heat_available = s->heatcontrol.Hmax - s->heatcontrol.Hnow_fused;
|
||||
@ -346,6 +361,12 @@ static int8_t Shoot_HeatDetectionFSM(Shoot_t *s)
|
||||
if (s == NULL) {
|
||||
return SHOOT_ERR_NULL;
|
||||
}
|
||||
|
||||
if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) {
|
||||
s->heatcontrol.detectState = SHOOT_HEAT_DETECT_IDLE;
|
||||
s->heatcontrol.shotDetected = false;
|
||||
return SHOOT_OK;
|
||||
}
|
||||
|
||||
switch (s->heatcontrol.detectState) {
|
||||
case SHOOT_HEAT_DETECT_IDLE:
|
||||
@ -456,7 +477,7 @@ static float Shoot_CaluFreqByHeat(Shoot_t *s)
|
||||
}
|
||||
|
||||
/* 如果热量控制未启用,返回配置的射频 */
|
||||
if (!s->param->heatControl.enable) {
|
||||
if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) {
|
||||
return s->param->basic.shot_freq;
|
||||
}
|
||||
|
||||
@ -502,7 +523,7 @@ static float Shoot_CaluFreqByHeat(Shoot_t *s)
|
||||
*/
|
||||
int8_t Shoot_CaluTargetAngle(Shoot_t *s, Shoot_CMD_t *cmd)
|
||||
{
|
||||
if (s == NULL || s->var_trig.num_toShoot == 0) {
|
||||
if (s == NULL || cmd == NULL || s->var_trig.num_toShoot == 0 || s->param->basic.num_trig_tooth == 0) {
|
||||
return SHOOT_ERR_NULL;
|
||||
}
|
||||
|
||||
@ -513,16 +534,19 @@ int8_t Shoot_CaluTargetAngle(Shoot_t *s, Shoot_CMD_t *cmd)
|
||||
float actual_freq = Shoot_CaluFreqByHeat(s);
|
||||
|
||||
/* 检查可发射弹丸数是否满足安全余量 */
|
||||
if (s->param->heatControl.enable && s->heatcontrol.shots_available <= s->param->heatControl.safe_shots) {
|
||||
if (s->param->heatControl.enable &&
|
||||
s->heatcontrol.shots_available <= s->param->heatControl.safe_shots) {
|
||||
actual_freq = 0.0f; /* 禁止发弹 */
|
||||
}
|
||||
|
||||
float dt = s->timer.now - s->var_trig.time_lastShoot;
|
||||
float dpos;
|
||||
float dpos_abs;
|
||||
dpos = CircleError(s->target_variable.trig_angle, s->var_trig.trig_agl, M_2PI);
|
||||
dpos_abs = fabsf(dpos);
|
||||
|
||||
/* 使用热量控制计算出的射频,而不是配置的固定射频 */
|
||||
if(actual_freq > 0.0f && dt >= 1.0f/actual_freq && cmd->firecmd && dpos<=1.0f)
|
||||
if(actual_freq > 0.0f && dt >= 1.0f/actual_freq && cmd->firecmd && dpos_abs <= 1.0f)
|
||||
{
|
||||
s->var_trig.time_lastShoot=s->timer.now;
|
||||
CircleAdd(&s->target_variable.trig_angle, M_2PI/s->param->basic.num_trig_tooth, M_2PI);
|
||||
@ -610,7 +634,7 @@ int8_t Shoot_UpdateFeedback(Shoot_t *s)
|
||||
s->var_trig.trig_agl = M_2PI - s->var_trig.trig_agl;
|
||||
}
|
||||
s->var_trig.fil_trig_rpm = LowPassFilter2p_Apply(&s->filter.trig.in, s->feedback.trig.feedback.rotor_speed);
|
||||
s->var_trig.trig_rpm = s->feedback.trig.feedback.rotor_speed / maxTrigrpm;
|
||||
s->var_trig.trig_rpm = s->feedback.trig.feedback.rotor_speed / MAX_TRIG_RPM;
|
||||
if(s->var_trig.trig_rpm>1.0f)s->var_trig.trig_rpm=1.0f;
|
||||
if(s->var_trig.trig_rpm<-1.0f)s->var_trig.trig_rpm=-1.0f;
|
||||
|
||||
@ -720,6 +744,7 @@ int8_t Shoot_RunningFSM(Shoot_t *s, Shoot_CMD_t *cmd)
|
||||
else if(last_firecmd==false&&cmd->firecmd==true)
|
||||
{
|
||||
s->running_state=SHOOT_STATE_FIRE;
|
||||
s->target_variable.trig_angle = s->var_trig.trig_agl;
|
||||
/* 根据模式设置待发射弹数 */
|
||||
switch(s->mode)
|
||||
{
|
||||
@ -786,6 +811,7 @@ int8_t Shoot_RunningFSM(Shoot_t *s, Shoot_CMD_t *cmd)
|
||||
{
|
||||
s->running_state=SHOOT_STATE_READY;
|
||||
pos=s->var_trig.trig_agl;
|
||||
s->target_variable.trig_angle = pos;
|
||||
s->var_trig.num_toShoot=0;
|
||||
}
|
||||
break;
|
||||
@ -849,7 +875,10 @@ int8_t Shoot_JamDetectionFSM(Shoot_t *s, Shoot_CMD_t *cmd)
|
||||
/* 清空待发射弹 */
|
||||
s->var_trig.num_toShoot=0;
|
||||
/* 修改拨弹盘目标角度 */
|
||||
s->target_variable.trig_angle = s->var_trig.trig_agl-(M_2PI/s->param->basic.num_trig_tooth);
|
||||
s->target_variable.trig_angle = s->var_trig.trig_agl;
|
||||
CircleAdd(&s->target_variable.trig_angle,
|
||||
-(M_2PI / s->param->basic.num_trig_tooth),
|
||||
M_2PI);
|
||||
/* 切换状态 */
|
||||
s->jamdetection.fsmState = SHOOT_JAMFSM_STATE_DEAL;
|
||||
/* 记录处理开始时间 */
|
||||
@ -900,7 +929,7 @@ int8_t Shoot_Init(Shoot_t *s, Shoot_Params_t *param, float target_freq)
|
||||
KPID_MODE_CALC_D,
|
||||
target_freq,
|
||||
¶m->pid.fric_follow);
|
||||
PID_Init(&s->pid.fric_err[i],
|
||||
PID_Init(&s->pid.fric_err[i],
|
||||
KPID_MODE_CALC_D,
|
||||
target_freq,
|
||||
¶m->pid.fric_err);
|
||||
|
||||
@ -102,6 +102,7 @@ typedef struct {
|
||||
}Shoot_JamDetection_t;
|
||||
|
||||
typedef struct {
|
||||
bool ref_online; /* 裁判系统在线标志:在线才启用热量限制 */
|
||||
/* 从裁判系统读取的常量 */
|
||||
float Hmax; // 热量上限
|
||||
float Hcd; // 热量冷却速度
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#include "bsp/time.h"
|
||||
#include "component/filter/filter.h"
|
||||
#include "component/user_math.h"
|
||||
#include "device/motor_dm.h"
|
||||
#include "module/chassis.h"
|
||||
/* Private typedef ---------------------------------------------------------- */
|
||||
/* Private define ----------------------------------------------------------- */
|
||||
@ -102,6 +103,8 @@ uint8_t Track_UpdateFeedback(Track_t *t)
|
||||
if (t == NULL) {
|
||||
return TRACK_ERR_NULL; // 参数错误
|
||||
}
|
||||
MOTOR_DM_Enable(&t->param->motor[0]);
|
||||
MOTOR_DM_Enable(&t->param->motor[1]);
|
||||
for (int i=0; i<TRACK_MOTOR_NUM; i++) {
|
||||
MOTOR_DM_Update(&t->param->motor[i]);
|
||||
MOTOR_DM_t *rm_motor = MOTOR_DM_GetMotor(&t->param->motor[i]);
|
||||
|
||||
@ -35,6 +35,8 @@ void Task_blink(void *argument) {
|
||||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||
/* USER CODE INIT BEGIN */
|
||||
BUZZER_Init(&buzzer, BSP_PWM_BUZZER);
|
||||
BUZZER_PlayMusic(&buzzer, MUSIC_NOKIA);
|
||||
|
||||
/* USER CODE INIT END */
|
||||
|
||||
while (1) {
|
||||
|
||||
@ -63,7 +63,7 @@ void Task_ctrl_chassis(void *argument) {
|
||||
/* 功率限制:裁判系统在线时使用下发上限,否则使用保守默认值 */
|
||||
float power_limit = (chassis_ref.ref_status == REF_STATUS_RUNNING)
|
||||
? chassis_ref.chassis_power_limit
|
||||
: 500.0f;
|
||||
: 80.0f;
|
||||
Chassis_Power_Control(&chassis, power_limit);
|
||||
|
||||
Chassis_Output(&chassis);
|
||||
|
||||
@ -51,10 +51,16 @@ void Task_ctrl_shoot(void *argument) {
|
||||
|
||||
/* 消费裁判系统发射数据:在线时更新热量控制参数 */
|
||||
if (shoot_ref.ref_status == REF_STATUS_RUNNING) {
|
||||
shoot.heatcontrol.ref_online = true;
|
||||
shoot.heatcontrol.Hmax = (float)shoot_ref.robot_status.shooter_barrel_heat_limit;
|
||||
shoot.heatcontrol.Hcd = (float)shoot_ref.robot_status.shooter_barrel_cooling_value;
|
||||
shoot.heatcontrol.Hnow = (float)shoot_ref.power_heat.shooter_42mm_barrel_heat;
|
||||
shoot.heatcontrol.Hgen = 100.0f; /* 42mm弹丸每发产生热量 */
|
||||
} else {
|
||||
shoot.heatcontrol.ref_online = false;
|
||||
shoot.heatcontrol.Hmax = 0.0f;
|
||||
shoot.heatcontrol.Hcd = 0.0f;
|
||||
shoot.heatcontrol.Hnow = 0.0f;
|
||||
}
|
||||
|
||||
Shoot_UpdateFeedback(&shoot);
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
AT9S_t at9s;
|
||||
#endif
|
||||
#ifdef DR16
|
||||
// 将DR16变量放到RAM_D1 (0x24000000),用于DMA传输
|
||||
// 将DR16变量放到RAM_D1,用于DMA传输并保证32字节对齐以支持Cache操作
|
||||
// __attribute__((section(".ram_d1"))) __attribute__((aligned(32)))
|
||||
DR16_t dr16;
|
||||
static DR16_SwitchPos_t last_sw_l = DR16_SW_ERR; /* 记录左拨杆上一次状态 */
|
||||
@ -73,7 +73,7 @@ void Task_rc(void *argument) {
|
||||
#endif
|
||||
#ifdef DR16
|
||||
// 等待DMA接收完成
|
||||
if (DR16_WaitDmaCplt(20)) {
|
||||
if (DR16_WaitDmaCplt(100)) {
|
||||
DR16_ParseData(&dr16);
|
||||
} else {
|
||||
DR16_Offline(&dr16);
|
||||
@ -87,7 +87,7 @@ void Task_rc(void *argument) {
|
||||
/* 拨杆从非UP状态切换到UP状态,且复位功能已使能,触发系统复位 */
|
||||
if (
|
||||
dr16.data.sw_l == DR16_SW_UP &&
|
||||
last_sw_l != DR16_SW_UP) {
|
||||
last_sw_l != DR16_SW_UP && last_sw_l != DR16_SW_ERR) {
|
||||
reset=!reset;
|
||||
}
|
||||
last_sw_l = dr16.data.sw_l; /* 更新拨杆状态 */
|
||||
@ -95,6 +95,6 @@ void Task_rc(void *argument) {
|
||||
#endif
|
||||
/* USER CODE END */
|
||||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -32,15 +32,15 @@ void Task_supercap(void *argument) {
|
||||
|
||||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||
/* USER CODE INIT BEGIN */
|
||||
SuperCap_Init();
|
||||
// SuperCap_Init();
|
||||
|
||||
SuperCap_CanTX.Enable = 1 ; //超级电容使能。1使能,0失能
|
||||
// SuperCap_CanTX.Enable = 1 ; //超级电容使能。1使能,0失能
|
||||
|
||||
SuperCap_CanTX.Charge = 1 ; //V1.1超级电容充电。1充电,0放电,在PLUS版本中,此标志位无效,超电的充放电是自动的
|
||||
// SuperCap_CanTX.Charge = 1 ; //V1.1超级电容充电。1充电,0放电,在PLUS版本中,此标志位无效,超电的充放电是自动的
|
||||
|
||||
SuperCap_CanTX.Powerlimit = 120 ; //裁判系统功率限制
|
||||
// SuperCap_CanTX.Powerlimit = 120 ; //裁判系统功率限制
|
||||
|
||||
SuperCap_CanTX.ChargePower = 1 ; //V1.1超级电容充电功率,在PLUS版本中,此参数,超电的充电功率随着底盘功率变化
|
||||
// SuperCap_CanTX.ChargePower = 1 ; //V1.1超级电容充电功率,在PLUS版本中,此参数,超电的充电功率随着底盘功率变化
|
||||
|
||||
/* USER CODE INIT END */
|
||||
|
||||
@ -48,14 +48,14 @@ void Task_supercap(void *argument) {
|
||||
tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||||
/* USER CODE BEGIN */
|
||||
/* 动态更新功率上限:裁判系统在线时使用下发值,否则回退到初始化值120W */
|
||||
osMessageQueueGet(task_runtime.msgq.cap.ref, &cap_ref, NULL, 0);
|
||||
if (cap_ref.ref_status == REF_STATUS_RUNNING && cap_ref.chassis_power_limit > 0.0f) {
|
||||
SuperCap_CanTX.Powerlimit = (uint8_t)cap_ref.chassis_power_limit;
|
||||
}
|
||||
// osMessageQueueGet(task_runtime.msgq.cap.ref, &cap_ref, NULL, 0);
|
||||
// if (cap_ref.ref_status == REF_STATUS_RUNNING && cap_ref.chassis_power_limit > 0.0f) {
|
||||
// SuperCap_CanTX.Powerlimit = (uint8_t)cap_ref.chassis_power_limit;
|
||||
// }
|
||||
|
||||
SuperCap_Update();
|
||||
// SuperCap_Update();
|
||||
|
||||
CAN_TX_SuperCapData(&SuperCap_CanTX);
|
||||
// CAN_TX_SuperCapData(&SuperCap_CanTX);
|
||||
|
||||
/* USER CODE END */
|
||||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||
|
||||
@ -49,7 +49,7 @@ Dma.SPI2_TX.1.SyncSignalID=NONE
|
||||
Dma.UART5_RX.2.Direction=DMA_PERIPH_TO_MEMORY
|
||||
Dma.UART5_RX.2.EventEnable=DISABLE
|
||||
Dma.UART5_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE
|
||||
Dma.UART5_RX.2.Instance=DMA2_Stream5
|
||||
Dma.UART5_RX.2.Instance=DMA1_Stream3
|
||||
Dma.UART5_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.UART5_RX.2.MemInc=DMA_MINC_ENABLE
|
||||
Dma.UART5_RX.2.Mode=DMA_NORMAL
|
||||
@ -231,9 +231,9 @@ MxDb.Version=DB.6.0.150
|
||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||
NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
||||
NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
||||
NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
||||
NVIC.DMA2_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
||||
NVIC.DMA2_Stream2_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true\:true
|
||||
NVIC.DMA2_Stream5_IRQn=true\:5\:0\:true\:false\:true\:false\:false\:true\:true
|
||||
NVIC.DMA2_Stream2_IRQn=true\:5\:0\:false\:false\:true\:false\:false\:true\:true
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||
NVIC.EXTI15_10_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
|
||||
NVIC.FDCAN1_IT0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
|
||||
@ -493,7 +493,7 @@ SPI6.Mode=SPI_MODE_MASTER
|
||||
SPI6.VirtualType=VM_MASTER
|
||||
TIM12.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||
TIM12.IPParameters=Channel-PWM Generation2 CH2,Prescaler,Period
|
||||
TIM12.Period=2500-1
|
||||
TIM12.Period=2000-1
|
||||
TIM12.Prescaler=24-1
|
||||
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
||||
TIM3.IPParameters=Channel-PWM Generation4 CH4,Prescaler,Period
|
||||
@ -503,7 +503,7 @@ UART5.BaudRate=100000
|
||||
UART5.DMADisableonRxErrorParam=UART_ADVFEATURE_DMA_ENABLEONRXERROR
|
||||
UART5.FIFOMode=FIFOMODE_DISABLE
|
||||
UART5.IPParameters=Mode,BaudRate,Parity,StopBits,WordLength,DMADisableonRxErrorParam,OverrunDisableParam,FIFOMode
|
||||
UART5.Mode=MODE_TX_RX
|
||||
UART5.Mode=MODE_RX
|
||||
UART5.OverrunDisableParam=UART_ADVFEATURE_OVERRUN_ENABLE
|
||||
UART5.Parity=PARITY_EVEN
|
||||
UART5.StopBits=UART_STOPBITS_1
|
||||
|
||||
@ -1,74 +1,87 @@
|
||||
|
||||
|
||||
GraphedExpression="((((gimbal).feedback).imu).eulr).pit", Color=#e56a6f
|
||||
GraphedExpression="((((gimbal).feedback).imu).eulr).yaw", Color=#35792b
|
||||
GraphedExpression="(((ai_cmd_from_can).gimbal_t).setpoint).yaw", Color=#769dda
|
||||
GraphedExpression="(((ai_cmd_from_can).gimbal_t).setpoint).pit", Color=#b14f0d
|
||||
OpenDocument="gimbal.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/gimbal.h", Line=57
|
||||
|
||||
Breakpoint=D:/CUBEMX/hero/god-yuan-hero/User/device/dr16.c:69:52, State=BP_STATE_DISABLED
|
||||
GraphedExpression="((((gimbal).feedback).imu).eulr).pit", Color=#e56a6f, Show=0
|
||||
GraphedExpression="((((gimbal).feedback).imu).eulr).yaw", Color=#35792b, Show=0
|
||||
GraphedExpression="(((ai_cmd_from_can).gimbal_t).setpoint).yaw", Color=#769dda, Show=0
|
||||
GraphedExpression="(((ai_cmd_from_can).gimbal_t).setpoint).pit", Color=#b14f0d, Show=0
|
||||
GraphedExpression="((dr16).raw_data).ch_r_x", DisplayFormat=DISPLAY_FORMAT_DEC, Color=#b3c38e, Show=0
|
||||
GraphedExpression="((dr16).data).ch_r_x", Color=#ab7b05, Show=0
|
||||
GraphedExpression="((((gimbal).feedback).motor).pit).rotor_abs_angle", Color=#7fd3b7, Show=0
|
||||
GraphedExpression="((shoot).heatcontrol).Hnow", Color=#50328f
|
||||
GraphedExpression="((shoot).heatcontrol).shots_available", DisplayFormat=DISPLAY_FORMAT_DEC, Color=#c587a5, Show=0
|
||||
OpenDocument="startup_stm32h723xx.s", FilePath="D:/CUBEMX/hero/god-yuan-hero/startup_stm32h723xx.s", Line=47
|
||||
OpenDocument="port.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c", Line=716
|
||||
OpenDocument="tasks.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/tasks.c", Line=4104
|
||||
OpenDocument="buzzer.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/buzzer.c", Line=79
|
||||
OpenDocument="blink.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/blink.c", Line=11
|
||||
OpenDocument="motor_dm.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/motor_dm.c", Line=40
|
||||
OpenDocument="ctrl_shoot.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ctrl_shoot.c", Line=12
|
||||
OpenDocument="ahrs.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/component/ahrs/ahrs.h", Line=0
|
||||
OpenDocument="main.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Core/Src/main.c", Line=60
|
||||
OpenDocument="ctrl_gimbal.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ctrl_gimbal.c", Line=0
|
||||
OpenDocument="startup_stm32h723xx.s", FilePath="D:/CUBEMX/hero/god-yuan-hero/startup_stm32h723xx.s", Line=48
|
||||
OpenDocument="gimbal.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/gimbal.h", Line=57
|
||||
OpenDocument="shoot.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/shoot.c", Line=33
|
||||
OpenDocument="ref_main.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ref_main.c", Line=12
|
||||
OpenDocument="referee.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/referee.h", Line=542
|
||||
OpenDocument="uart.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/bsp/uart.c", Line=111
|
||||
OpenDocument="supercap.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/supercap.c", Line=0
|
||||
OpenDocument="stm32h7xx_it.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Core/Src/stm32h7xx_it.c", Line=351
|
||||
OpenDocument="uart.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/bsp/uart.c", Line=108
|
||||
OpenDocument="supercap.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/supercap.c", Line=15
|
||||
OpenDocument="stm32h7xx_it.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Core/Src/stm32h7xx_it.c", Line=83
|
||||
OpenDocument="cmsis_os2.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c", Line=515
|
||||
OpenDocument="config.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/config.c", Line=455
|
||||
OpenDocument="ai.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ai.c", Line=30
|
||||
OpenDocument="ai.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ai.c", Line=42
|
||||
OpenDocument="referee.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/referee.c", Line=21
|
||||
OpenDocument="cmd.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/cmd.c", Line=51
|
||||
OpenDocument="stm32h7xx_hal_fdcan.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c", Line=5367
|
||||
OpenDocument="track.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/track.c", Line=87
|
||||
OpenDocument="rc.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/rc.c", Line=48
|
||||
OpenDocument="track.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/track.c", Line=86
|
||||
OpenDocument="referee_proto_types.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/referee_proto_types.h", Line=10
|
||||
OpenDocument="cmsis_gcc.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/Drivers/CMSIS/Include/cmsis_gcc.h", Line=1193
|
||||
OpenDocument="cmd.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/cmd/cmd.c", Line=192
|
||||
OpenDocument="fdcan.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/bsp/fdcan.c", Line=98
|
||||
OpenDocument="cmd.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/cmd/cmd.h", Line=0
|
||||
OpenDocument="vision_bridge.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/vision_bridge.c", Line=78
|
||||
OpenDocument="ctrl_chassis.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ctrl_chassis.c", Line=36
|
||||
OpenDocument="motor.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/motor.h", Line=20
|
||||
OpenDocument="ctrl_chassis.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ctrl_chassis.c", Line=33
|
||||
OpenDocument="motor.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/motor.h", Line=19
|
||||
OpenDocument="filter.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/component/filter/filter.c", Line=54
|
||||
OpenDocument="user_math.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/component/user_math.c", Line=45
|
||||
OpenDocument="pid.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/component/pid.c", Line=61
|
||||
OpenDocument="gimbal.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/gimbal.c", Line=220
|
||||
OpenDocument="tasks.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/tasks.c", Line=3655
|
||||
OpenDocument="stm32h7xx_hal_fdcan.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_fdcan.c", Line=6179
|
||||
OpenDocument="motor_rm.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/motor_rm.c", Line=129
|
||||
OpenDocument="stm32h7xx_hal_uart_ex.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c", Line=964
|
||||
OpenDocument="queue.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/queue.c", Line=1275
|
||||
OpenDocument="chassis.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/chassis.c", Line=213
|
||||
OpenDocument="supercap.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/supercap.c", Line=18
|
||||
OpenDocument="supercap.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/supercap.c", Line=15
|
||||
OpenDocument="atti_esti.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/atti_esti.c", Line=121
|
||||
OpenDocument="fdcan.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Core/Src/fdcan.c", Line=0
|
||||
OpenDocument="time.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/bsp/time.c", Line=17
|
||||
OpenToolbar="Debug", Floating=0, x=0, y=0
|
||||
OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=1, w=728, h=584, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1
|
||||
OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=328, h=930, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Disassembly", DockArea=RIGHT, x=0, y=0, w=728, h=345, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Memory 1", DockArea=BOTTOM, x=0, y=0, w=239, h=544, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0xFFFF5088
|
||||
OpenWindow="Watched Data 1", DockArea=RIGHT, x=0, y=1, w=728, h=584, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Functions", DockArea=LEFT, x=0, y=0, w=328, h=930, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Data Sampling", DockArea=BOTTOM, x=2, y=0, w=866, h=525, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0
|
||||
OpenWindow="Timeline", DockArea=BOTTOM, x=1, y=0, w=1453, h=544, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=0, CodePaneShown=0, PinCursor="Cursor Movable", TimePerDiv="5 s / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="21;187", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="1238;0", CodeGraphLegendShown=0, CodeGraphLegendPosition="1254;0"
|
||||
OpenWindow="Console", DockArea=BOTTOM, x=2, y=0, w=866, h=525, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=2, w=695, h=337, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1
|
||||
OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=312, h=983, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Disassembly", DockArea=RIGHT, x=0, y=1, w=695, h=322, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Memory 1", DockArea=BOTTOM, x=0, y=0, w=462, h=491, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0xFFFF5088
|
||||
OpenWindow="Watched Data 1", DockArea=RIGHT, x=0, y=2, w=695, h=337, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Functions", DockArea=LEFT, x=0, y=0, w=312, h=983, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="Data Sampling", DockArea=BOTTOM, x=2, y=0, w=752, h=472, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0
|
||||
OpenWindow="Timeline", DockArea=BOTTOM, x=1, y=0, w=1344, h=491, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=0, CodePaneShown=0, PinCursor="Cursor Movable", TimePerDiv="5 s / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="22;108", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="1431;-69", CodeGraphLegendShown=0, CodeGraphLegendPosition="1447;0"
|
||||
OpenWindow="Console", DockArea=BOTTOM, x=2, y=0, w=752, h=472, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
|
||||
OpenWindow="RTOS", DockArea=RIGHT, x=0, y=0, w=695, h=322, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, Showing=""
|
||||
SmartViewPlugin="", Page="", Toolbar="Hidden", Window="SmartView 1"
|
||||
TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[120;144;464]
|
||||
TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[120;144;405]
|
||||
TableHeader="Functions", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Address";"Size";"#Insts";"Source"], ColWidths=[1594;104;100;100;100]
|
||||
TableHeader="Power Sampling", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time";"Ch 0"], ColWidths=[100;100;100]
|
||||
TableHeader="RegisterSelectionDialog", SortCol="None", SortOrder="ASCENDING", VisibleCols=[], ColWidths=[]
|
||||
TableHeader="Source Files", SortCol="File", SortOrder="ASCENDING", VisibleCols=["File";"Status";"Size";"#Insts";"Path"], ColWidths=[215;100;100;100;1022]
|
||||
TableHeader="Watched Data 1", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Value";"Location";"Refresh"], ColWidths=[298;229;145;100]
|
||||
TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time";" ((((gimbal).feedback).imu).eulr).pit";" ((((gimbal).feedback).imu).eulr).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).pit"], ColWidths=[100;100;100;100;100;100]
|
||||
TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[118;100;134;134;134;144;110;144;134]
|
||||
TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time";" ((((gimbal).feedback).imu).eulr).pit";" ((((gimbal).feedback).imu).eulr).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).pit";" ((dr16).raw_data).ch_r_x";" ((dr16).data).ch_r_x";" ((((gimbal).feedback).motor).pit).rotor_abs_angle";" ((shoot).heatcontrol).Hnow";" ((shoot).heatcontrol).shots_available"], ColWidths=[100;100;100;100;100;100;100;100;100;100;100]
|
||||
TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[118;214;100;100;100;100;110;126;126]
|
||||
TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[200;100;100;340]
|
||||
WatchedExpression="cmd", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="bmi088", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="chassis", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="gimbal", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="shoot", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="shoot ", Window=Watched Data 1
|
||||
WatchedExpression="track_cmd", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="track", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="robot_config", RefreshRate=5, Window=Watched Data 1
|
||||
@ -84,4 +97,6 @@ WatchedExpression="gimbal_cmd", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="for_cmdnuc", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="ai_cmd_from_can", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="raw_shoot", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="shoot_forai", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="shoot_forai", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression="dr16", RefreshRate=5, Window=Watched Data 1
|
||||
WatchedExpression=" ", Window=Watched Data 1
|
||||
Loading…
Reference in New Issue
Block a user