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);
50 STM32CAN(CAN_HandleTypeDef* hcan, uint32_t pool_size);
85 CAN_HandleTypeDef* hcan_;
89 static STM32CAN* map[STM32_CAN_NUMBER];
93 CAN_RxHeaderTypeDef header;
99 CAN_TxHeaderTypeDef header;
107 std::atomic<uint32_t> tx_lock_{0};
108 std::atomic<uint32_t> tx_pend_{0};
110 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
STM32 CAN 驱动实现 / STM32 CAN driver implementation.
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)
构造 CAN 驱动对象 / Construct CAN driver object
uint32_t GetClockFreq() const override
获取 CAN 外设时钟频率(Hz)。 Get CAN peripheral clock frequency in Hz.
ErrorCode Init(void)
初始化驱动 / Initialize driver
ErrorCode AddMessage(const ClassicPack &pack) override
添加经典 CAN 消息。Add classic CAN message.
void ProcessErrorInterrupt()
处理错误中断 / Handle error interrupt
void ProcessRxInterrupt()
处理接收中断 / Handle RX interrupt
经典 CAN 帧数据结构。Classic CAN frame structure.
CAN 配置参数。CAN configuration parameters.
CAN 当前错误状态快照(来自硬件计数器/状态机)。 Snapshot of current CAN controller error state (from HW counters/state).