5#ifdef HAL_CAN_MODULE_ENABLED
9#define CAN1 ((CAN_TypeDef*)CAN_BASE)
32static_assert(STM32_CAN_NUMBER >= 1,
"No CAN instance detected for this MCU");
34stm32_can_id_t STM32_CAN_GetID(CAN_TypeDef* addr);
52 STM32CAN(CAN_HandleTypeDef* hcan, uint32_t pool_size);
87 CAN_HandleTypeDef* hcan_;
91 static STM32CAN* map[STM32_CAN_NUMBER];
95 CAN_RxHeaderTypeDef header;
101 CAN_TxHeaderTypeDef header;
109 std::atomic<uint32_t> tx_lock_{0};
110 std::atomic<uint32_t> tx_pend_{0};
112 static inline void BuildTxHeader(
const ClassicPack& p, CAN_TxHeaderTypeDef& h);
CAN 通信抽象类,定义经典 CAN 帧与订阅接口。 Abstract class for CAN communication with classic CAN frames and subscript...
无锁无序槽池 / Lock-free, unordered slot pool
STM32CAN 类,用于处理 STM32 系统的 CAN 通道。 Provides handling for STM32 CAN channels.
ErrorCode GetErrorState(CAN::ErrorState &state) const override
查询当前错误状态(快照)。 Query current CAN controller error state (snapshot).
ErrorCode SetConfig(const CAN::Configuration &cfg) override
设置 CAN 配置。Set CAN configuration.
STM32CAN(CAN_HandleTypeDef *hcan, uint32_t pool_size)
STM32CAN 类,用于处理 STM32 系统的 CAN 通道。 Provides handling for STM32 CAN.
uint32_t GetClockFreq() const override
获取 CAN 外设时钟频率(Hz)。 Get CAN peripheral clock frequency in Hz.
ErrorCode AddMessage(const ClassicPack &pack) override
添加经典 CAN 消息。Add classic CAN message.
void ProcessErrorInterrupt()
处理错误中断
void ProcessRxInterrupt()
处理接收中断
经典 CAN 帧数据结构。Classic CAN frame structure.
CAN 配置参数。CAN configuration parameters.
CAN 当前错误状态快照(来自硬件计数器/状态机)。 Snapshot of current CAN controller error state (from HW counters/state).