增加can发送失败处理,增加debug命令和设置方向命令
This commit is contained in:
parent
8c98fbc0d2
commit
fda58988ed
@ -44,9 +44,9 @@ void MX_CAN1_Init(void)
|
||||
hcan1.Init.TimeSeg1 = CAN_BS1_2TQ;
|
||||
hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;
|
||||
hcan1.Init.TimeTriggeredMode = DISABLE;
|
||||
hcan1.Init.AutoBusOff = DISABLE;
|
||||
hcan1.Init.AutoBusOff = ENABLE;
|
||||
hcan1.Init.AutoWakeUp = DISABLE;
|
||||
hcan1.Init.AutoRetransmission = DISABLE;
|
||||
hcan1.Init.AutoRetransmission = ENABLE;
|
||||
hcan1.Init.ReceiveFifoLocked = DISABLE;
|
||||
hcan1.Init.TransmitFifoPriority = DISABLE;
|
||||
if (HAL_CAN_Init(&hcan1) != HAL_OK)
|
||||
|
||||
@ -52,7 +52,8 @@
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
extern uint8_t g_debugLevel;
|
||||
extern uint8_t g_direction;
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
@ -170,8 +171,16 @@ int main(void)
|
||||
|
||||
prev_angle = angle;
|
||||
prev_tick_ms = now_ms;
|
||||
|
||||
if(g_direction > 0)
|
||||
{
|
||||
// 反转方向
|
||||
velocity_deg_s = -velocity_deg_s;
|
||||
angle = -angle;
|
||||
}
|
||||
if(g_debugLevel > 0)
|
||||
{
|
||||
_dbg_printf("Angle: %u, Vel: %.2f dt: %u ms\r\n", angle, velocity_deg_s, dt_ms);
|
||||
}
|
||||
HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);
|
||||
status = 1;
|
||||
}
|
||||
@ -180,6 +189,7 @@ int main(void)
|
||||
{
|
||||
uint8_t canData[8] = {0};
|
||||
int16_t vel_cdeg_s = (int16_t)(velocity_deg_s * 100.0f); // 0.01 deg/s
|
||||
int transmitResult = 0;
|
||||
|
||||
canData[0] = 0xAA; // 头
|
||||
canData[1] = (angle >> 8) & 0xFF;
|
||||
@ -190,11 +200,23 @@ int main(void)
|
||||
canData[6] = 0x00; // 保留
|
||||
canData[7] = can_checksum_calculate(canData, 7);
|
||||
|
||||
can_node_transmit(flashConfig->can_id, canData);
|
||||
transmitResult = can_node_transmit(flashConfig->can_id, canData);
|
||||
if (transmitResult != 0)
|
||||
{
|
||||
status = -1; // 发送失败,回到初始化状态
|
||||
status = 2; // 直接进入错误状态,持续闪烁蓝灯
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 0;
|
||||
HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET); //关闭蓝灯
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
HAL_GPIO_TogglePin(LED_B_GPIO_Port, LED_B_Pin);
|
||||
// HAL_Delay(100);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -135,7 +135,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name></Name>
|
||||
<Name>(105=-1,-1,-1,-1,0)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@ -150,7 +150,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||
<Name>-U-O142 -O2254 -S0 -C0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L431CCUx$CMSIS\Flash\STM32L4xx_256.FLM)</Name>
|
||||
<Name>-U16004A002933353739303541 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L431CCUx$CMSIS\Flash\STM32L4xx_256.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 -WK0-R0</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
|
||||
@ -2,11 +2,13 @@
|
||||
CAD.formats=
|
||||
CAD.pinconfig=
|
||||
CAD.provider=
|
||||
CAN1.ABOM=ENABLE
|
||||
CAN1.BS1=CAN_BS1_2TQ
|
||||
CAN1.CalculateBaudRate=1000000
|
||||
CAN1.CalculateTimeBit=1000
|
||||
CAN1.CalculateTimeQuantum=250.0
|
||||
CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1
|
||||
CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,ABOM,NART
|
||||
CAN1.NART=ENABLE
|
||||
CAN1.Prescaler=20
|
||||
Dma.Request0=USART1_RX
|
||||
Dma.RequestsNb=1
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
|
||||
CAN_RxHeaderTypeDef can1RxHeader; // FDCAN1 接收头
|
||||
uint8_t can1RxData[8]; // FDCAN1 接收数据
|
||||
int canTransmitErrorCount = 0;
|
||||
|
||||
void can_node_init(void)
|
||||
{
|
||||
@ -45,7 +46,7 @@ void can_node_init(void)
|
||||
_dbg_printf("CAN1 initialized successfully\r\n");
|
||||
}
|
||||
|
||||
void can_node_transmit(uint32_t canID, uint8_t *TxData)
|
||||
int can_node_transmit(uint32_t canID, uint8_t *TxData)
|
||||
{
|
||||
CAN_TxHeaderTypeDef txHeader;
|
||||
uint32_t txMailbox;
|
||||
@ -60,8 +61,16 @@ void can_node_transmit(uint32_t canID, uint8_t *TxData)
|
||||
// 等待邮箱空闲
|
||||
while (HAL_CAN_GetTxMailboxesFreeLevel(&hcan1) == 0)
|
||||
{
|
||||
canTransmitErrorCount ++;
|
||||
if(canTransmitErrorCount > 1000)
|
||||
{
|
||||
_dbg_printf("CAN transmit timeout\r\n");
|
||||
canTransmitErrorCount = 0;
|
||||
return -1;
|
||||
}
|
||||
};
|
||||
HAL_CAN_AddTxMessage(&hcan1, &txHeader, TxData, &txMailbox);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
|
||||
|
||||
@ -5,6 +5,6 @@
|
||||
|
||||
void can_node_init(void);
|
||||
|
||||
void can_node_transmit(uint32_t canID, uint8_t *TxData);
|
||||
int can_node_transmit(uint32_t canID, uint8_t *TxData);
|
||||
|
||||
#endif /* _CAN_NODE_H_ */
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
|
||||
uint8_t cmdData[32];
|
||||
uint8_t uart1len = 0;
|
||||
uint8_t g_debugLevel = 0;
|
||||
uint8_t g_direction = 0;
|
||||
extern DMA_HandleTypeDef hdma_usart1_rx;
|
||||
|
||||
FlashConfig_t *currentConfig;
|
||||
@ -41,6 +43,28 @@ void UART_CommandHandler(char *data, uint16_t len)
|
||||
|
||||
}
|
||||
}
|
||||
else if(strncmp(data, "SETDEBUG", 8) == 0)
|
||||
{
|
||||
uint8_t debug;
|
||||
if (sscanf(data + 8, "%x", &debug) == 1)
|
||||
{
|
||||
g_debugLevel = debug;
|
||||
_dbg_printf("Set debug level: 0x%02X\n", g_debugLevel);
|
||||
}
|
||||
}
|
||||
else if(strncmp(data, "SETDIR", 6) == 0)
|
||||
{
|
||||
uint8_t dir;
|
||||
if (sscanf(data + 6, "%x", &dir) == 1)
|
||||
{
|
||||
g_direction = dir;
|
||||
_dbg_printf("Set direction: 0x%02X\n", g_direction);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_dbg_printf("Unknown command: %s\n", data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user