1#include "stm32_canfd.hpp"
3#ifdef HAL_FDCAN_MODULE_ENABLED
7STM32CANFD* STM32CANFD::map[STM32_FDCAN_NUMBER] = {
nullptr};
15stm32_fdcan_id_t STM32_FDCAN_GetID(FDCAN_GlobalTypeDef* addr)
19 return stm32_fdcan_id_t::STM32_FDCAN_ID_ERROR;
22 else if (addr == FDCAN1)
24 return stm32_fdcan_id_t::STM32_FDCAN1;
28 else if (addr == FDCAN2)
30 return stm32_fdcan_id_t::STM32_FDCAN2;
34 else if (addr == FDCAN3)
36 return stm32_fdcan_id_t::STM32_FDCAN3;
41 return stm32_fdcan_id_t::STM32_FDCAN_ID_ERROR;
45extern "C" void HAL_FDCAN_ErrorCallback(FDCAN_HandleTypeDef* hcan)
47 hcan->ErrorCode = HAL_FDCAN_ERROR_NONE;
48 auto can = STM32CANFD::map[STM32_FDCAN_GetID(hcan->Instance)];
55extern "C" void HAL_FDCAN_ErrorStatusCallback(FDCAN_HandleTypeDef* hfdcan,
56 uint32_t ErrorStatusITs)
58 if ((ErrorStatusITs & FDCAN_IT_BUS_OFF) != RESET)
60 FDCAN_ProtocolStatusTypeDef protocol_status = {};
61 HAL_FDCAN_GetProtocolStatus(hfdcan, &protocol_status);
62 if (protocol_status.BusOff)
64 CLEAR_BIT(hfdcan->Instance->CCCR, FDCAN_CCCR_INIT);
68 auto can = STM32CANFD::map[STM32_FDCAN_GetID(hfdcan->Instance)];
75extern "C" void HAL_FDCAN_TxBufferCompleteCallback(FDCAN_HandleTypeDef* hcan,
76 uint32_t BufferIndexes)
78 UNUSED(BufferIndexes);
79 auto can = STM32CANFD::map[STM32_FDCAN_GetID(hcan->Instance)];
86extern "C" void HAL_FDCAN_TxFifoEmptyCallback(FDCAN_HandleTypeDef* hcan)
88 auto can = STM32CANFD::map[STM32_FDCAN_GetID(hcan->Instance)];
95extern "C" void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef* hcan, uint32_t RxFifo0ITs)
98 auto can = STM32CANFD::map[STM32_FDCAN_GetID(hcan->Instance)];
105extern "C" void HAL_FDCAN_RxFifo1Callback(FDCAN_HandleTypeDef* hcan, uint32_t RxFifo1ITs)
108 auto can = STM32CANFD::map[STM32_FDCAN_GetID(hcan->Instance)];
STM32CANFD 类,用于处理 STM32 系统的 CANFD 通道。 Provides handling for STM32 CANFD.
void ProcessRxInterrupt(uint32_t fifo)
处理接收中断
void ProcessTxInterrupt()
处理发送中断
LibXR Color Control Library / LibXR终端颜色控制库