remap/switch CANTX/CANRX pins STM32H7 FDCAN模块有流程吗?

Is there a process to remap/switch CANTX/CANRX pins STM32H7 FDCAN module?

正在测试带有 FDCAN 模块的 STM32(从较旧的 BxCAN 外设更新而来)。 500kbps 的 CAN 经典。

我 运行 遇到一个问题,当使用默认的一对引脚时(在我的例子中是 D0/D1)我得到了预期的行为,但是当将引脚切换到第二个选项时(B8/B9) 使用 GPIO 重映射,我在总线上得到奇怪的输出。

我尝试了波特率设置和协议异常等选项。似乎没有任何内容可以解释此范围输出的来源。

我正在使用 HAL 来使它正常工作,所以我确定我在重新映射时没有遗漏任何寄存器。我有 DeInit 和 ReInit FDCAN 模块,started/stopped,等等。似乎没有记录重新映射引脚的“过程”。参考模块的整个FDCAN部分没有字母GPIO。

图片:黄色为CANTX 0-3V信号(低为显性)。紫色是 CAN+ 信号,它在 2.5V 下闲置并在显性状态下超过 ~3.5V。这条线上没有其他东西,所以我不担心锯齿。较大的初始 CAN“SOF”脉冲的时序错误。长隐性是无稽之谈。然后小值 1 位是 500kbps 的正确 2uS 脉冲。改变放入FDCAN FIFO的数据没有区别,输出总是一样的。

已解决。

发送此消息后,FDCAN->CCCR 寄存器中的 INIT 位已设置。错误计数器中有值。指示内部错误。我使用 HAL 来节省时间,但它是 over-writting 我想要的 GPIO 设置。

我会将引脚 B8/B9 设置为 FDCAN 的 AF 模式。然后调用 FDCAN_DeInit/Init,它通过 MSP_INIT 回调也调用 GPIO init,但用于原始 D0/D1 引脚。两组引脚同时启用。

这是一个明显的问题。 HAL 非常适合原型制作,但要小心,因为它会尝试“提供帮助”。充其量是未定义的行为,我通常不会 post 这么愚蠢的错误。

但是... 也许其他人觉得有趣的是,无论 FDCAN 状态机在这里做什么,都会在示波器图片中看到这个独特的输出。我最初没有仔细检查我的引脚设置,因为它看起来是正确的,我在示波器上得到输出,只是错误的输出。我花了更多时间检查外围设备设置和输入的数据。