增加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.TimeSeg1 = CAN_BS1_2TQ;
|
||||||
hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;
|
hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;
|
||||||
hcan1.Init.TimeTriggeredMode = DISABLE;
|
hcan1.Init.TimeTriggeredMode = DISABLE;
|
||||||
hcan1.Init.AutoBusOff = DISABLE;
|
hcan1.Init.AutoBusOff = ENABLE;
|
||||||
hcan1.Init.AutoWakeUp = DISABLE;
|
hcan1.Init.AutoWakeUp = DISABLE;
|
||||||
hcan1.Init.AutoRetransmission = DISABLE;
|
hcan1.Init.AutoRetransmission = ENABLE;
|
||||||
hcan1.Init.ReceiveFifoLocked = DISABLE;
|
hcan1.Init.ReceiveFifoLocked = DISABLE;
|
||||||
hcan1.Init.TransmitFifoPriority = DISABLE;
|
hcan1.Init.TransmitFifoPriority = DISABLE;
|
||||||
if (HAL_CAN_Init(&hcan1) != HAL_OK)
|
if (HAL_CAN_Init(&hcan1) != HAL_OK)
|
||||||
|
|||||||
@ -52,7 +52,8 @@
|
|||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
|
extern uint8_t g_debugLevel;
|
||||||
|
extern uint8_t g_direction;
|
||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
@ -170,8 +171,16 @@ int main(void)
|
|||||||
|
|
||||||
prev_angle = angle;
|
prev_angle = angle;
|
||||||
prev_tick_ms = now_ms;
|
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);
|
_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);
|
HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);
|
||||||
status = 1;
|
status = 1;
|
||||||
}
|
}
|
||||||
@ -180,6 +189,7 @@ int main(void)
|
|||||||
{
|
{
|
||||||
uint8_t canData[8] = {0};
|
uint8_t canData[8] = {0};
|
||||||
int16_t vel_cdeg_s = (int16_t)(velocity_deg_s * 100.0f); // 0.01 deg/s
|
int16_t vel_cdeg_s = (int16_t)(velocity_deg_s * 100.0f); // 0.01 deg/s
|
||||||
|
int transmitResult = 0;
|
||||||
|
|
||||||
canData[0] = 0xAA; // 头
|
canData[0] = 0xAA; // 头
|
||||||
canData[1] = (angle >> 8) & 0xFF;
|
canData[1] = (angle >> 8) & 0xFF;
|
||||||
@ -190,11 +200,23 @@ int main(void)
|
|||||||
canData[6] = 0x00; // 保留
|
canData[6] = 0x00; // 保留
|
||||||
canData[7] = can_checksum_calculate(canData, 7);
|
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;
|
status = 0;
|
||||||
|
HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET); //关闭蓝灯
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 2:
|
||||||
|
HAL_GPIO_TogglePin(LED_B_GPIO_Port, LED_B_Pin);
|
||||||
|
// HAL_Delay(100);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -135,7 +135,7 @@
|
|||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>DLGUARM</Key>
|
<Key>DLGUARM</Key>
|
||||||
<Name></Name>
|
<Name>(105=-1,-1,-1,-1,0)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
@ -150,7 +150,7 @@
|
|||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
<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>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint/>
|
<Breakpoint/>
|
||||||
|
|||||||
@ -2,11 +2,13 @@
|
|||||||
CAD.formats=
|
CAD.formats=
|
||||||
CAD.pinconfig=
|
CAD.pinconfig=
|
||||||
CAD.provider=
|
CAD.provider=
|
||||||
|
CAN1.ABOM=ENABLE
|
||||||
CAN1.BS1=CAN_BS1_2TQ
|
CAN1.BS1=CAN_BS1_2TQ
|
||||||
CAN1.CalculateBaudRate=1000000
|
CAN1.CalculateBaudRate=1000000
|
||||||
CAN1.CalculateTimeBit=1000
|
CAN1.CalculateTimeBit=1000
|
||||||
CAN1.CalculateTimeQuantum=250.0
|
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
|
CAN1.Prescaler=20
|
||||||
Dma.Request0=USART1_RX
|
Dma.Request0=USART1_RX
|
||||||
Dma.RequestsNb=1
|
Dma.RequestsNb=1
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
CAN_RxHeaderTypeDef can1RxHeader; // FDCAN1 接收头
|
CAN_RxHeaderTypeDef can1RxHeader; // FDCAN1 接收头
|
||||||
uint8_t can1RxData[8]; // FDCAN1 接收数据
|
uint8_t can1RxData[8]; // FDCAN1 接收数据
|
||||||
|
int canTransmitErrorCount = 0;
|
||||||
|
|
||||||
void can_node_init(void)
|
void can_node_init(void)
|
||||||
{
|
{
|
||||||
@ -45,7 +46,7 @@ void can_node_init(void)
|
|||||||
_dbg_printf("CAN1 initialized successfully\r\n");
|
_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;
|
CAN_TxHeaderTypeDef txHeader;
|
||||||
uint32_t txMailbox;
|
uint32_t txMailbox;
|
||||||
@ -60,8 +61,16 @@ void can_node_transmit(uint32_t canID, uint8_t *TxData)
|
|||||||
// 等待邮箱空闲
|
// 等待邮箱空闲
|
||||||
while (HAL_CAN_GetTxMailboxesFreeLevel(&hcan1) == 0)
|
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);
|
HAL_CAN_AddTxMessage(&hcan1, &txHeader, TxData, &txMailbox);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
|
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
|
||||||
|
|||||||
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
void can_node_init(void);
|
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_ */
|
#endif /* _CAN_NODE_H_ */
|
||||||
|
|||||||
@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
uint8_t cmdData[32];
|
uint8_t cmdData[32];
|
||||||
uint8_t uart1len = 0;
|
uint8_t uart1len = 0;
|
||||||
|
uint8_t g_debugLevel = 0;
|
||||||
|
uint8_t g_direction = 0;
|
||||||
extern DMA_HandleTypeDef hdma_usart1_rx;
|
extern DMA_HandleTypeDef hdma_usart1_rx;
|
||||||
|
|
||||||
FlashConfig_t *currentConfig;
|
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