3. 启动CAN并启用中断接收
配置完成后,启动CAN,并启用接收中断:
void CAN_Start(void)
{
if (HAL_CAN_Start(&hcan1) != HAL_OK)
{
// 启动失败处理
Error_Handler();
}
if (HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
{
// 启用中断失败处理
Error_Handler();
}
}
4. 接收CAN消息
在CAN中断处理函数中,接收消息并处理:
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
CAN_RxHeaderTypeDef RxHeader;
uint8_t RxData[8];
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK)
{
// 接收消息失败处理
Error_Handler();
}
// 根据RxHeader.StdId或RxHeader.ExtId处理不同的ID
if (RxHeader.IDE == CAN_ID_STD)
{
// 处理标准帧
}
else if (RxHeader.IDE == CAN_ID_EXT)
{
// 处理扩展帧
}
}
|