有STM32直连CAN收发器的CAN总线库吗?

Is there a CAN bus library for STM32 to direct connect with a CAN transceiver?

许多 STM32 芯片组支持 1 或 2 通道 CAN PIN 输出。 STM32有没有直接连接CAN收发器如MCP2551的CAN总线库?但是CAN收发器是什么并不重要。

CAN收发器只是一个高速降压转换器。 (基本水平)

CAN 协议在不同的电压范围内工作。 MCP2551是一套适用于12V和24V系统的CAN收发器。增加了有助于物理层的功能,例如 externally-controlled slope 以减少 RFI 辐射,detection of ground faultvoltage brown-out protection 等。
它不依赖于 CAN 逻辑。只是为了帮助你处理裸物理层。

回答你的问题:
按照RishabhHardas的推荐,通过CubeMx使用STM32提供的HAL库。

使用 CubeMx
这是 ST-Micro 提供的软件,可帮助您设置任何外围应用程序的样板代码。
你也可以在 Cube 中查看 STM 提供的示例项目。这将使您 kick-start 了解 STM32 上的 CAN

STM32Cube_FW_F4_V1.9.0\Projects\STM324xG_EVAL\Examples\CAN\CAN_Networking

设置完成后,您可以通过包含 header.
来调用 HAL_CAN_Transmit()HAL_CAN_Receive() 查看 this 关于 STM32 社区的讨论。

对于软件,请在 Github 上查找 CANtact 开源项目。它是 STM32F042 的一个实现。我不得不调整项目以在 Atollic 下构建它,但它并不太难并且可以正常工作。它通过 USB 虚拟 COM 端口提供 SLCAN 类型的接口,非常快速和方便。

STM32F103 (Bluepill) (Google "lawicel-slcan") 也有 CAN 代码,但该芯片不太方便,因为您不能同时使用 CAN 和 USB(它们共享RAM 缓冲区)所以如果你想要 CAN,你将没有 USB,并且通过 UART 路由 CAN 消息将严重限制带宽。如果您的整个应用程序都在 STM32 上运行,那可能没问题。