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)
- {
- // 处理扩展帧
- }
- }
|