STM32 HAL可以发送邮箱

STM32 HAL可以发送邮箱,stm32,can-bus,hal,Stm32,Can Bus,Hal,我正在做一个使用STM32 HAL驱动程序的项目,特别是在中断模式下的CAN驱动程序。据我所知,STM32F407xx微控制器有三个CAN传输邮箱,允许用户一次“排队”传输三条消息。 然而,当第二次调用HAL_CAN_Transmit_IT()时,HAL_CAN驱动程序似乎会返回HAL_BUSY;查看源代码,在将句柄状态设置为BUSY_TX(即使其他邮箱可用于以下邮件)之前,该函数似乎不会检查任何其他邮箱是否为空,从而防止后续呼叫将邮件添加到其他邮箱 我是不是错过了这个司机的工作方式?过去有人碰

我正在做一个使用STM32 HAL驱动程序的项目,特别是在中断模式下的CAN驱动程序。据我所知,STM32F407xx微控制器有三个CAN传输邮箱,允许用户一次“排队”传输三条消息。 然而,当第二次调用HAL_CAN_Transmit_IT()时,HAL_CAN驱动程序似乎会返回HAL_BUSY;查看源代码,在将句柄状态设置为BUSY_TX(即使其他邮箱可用于以下邮件)之前,该函数似乎不会检查任何其他邮箱是否为空,从而防止后续呼叫将邮件添加到其他邮箱

我是不是错过了这个司机的工作方式?过去有人碰到过这个吗?如有任何想法,将不胜感激


谢谢

我的大多数STM32工作都是裸机或开放库,因此我不熟悉官方的STM32工具集,比如我假设您正在使用的cube

有了这个免责声明,我认为这与邮箱的使用方式有关

在STM32F413/423的文件(第32.3.3节)中,说明:
为软件提供了三个发送邮箱,用于设置消息。传输计划程序决定首先传输哪个邮箱。

在第32.7.1节中,它表示邮箱优先级已发送

按标识符:当多个传输邮箱处于挂起状态时,传输顺序由存储在邮箱中的邮件的标识符给出。根据CAN协议的仲裁,具有最低标识符值的消息具有最高优先级。如果标识符值相等,将首先安排较低的邮箱号

按传输请求顺序:通过在can_MCR寄存器中设置TXFP位,可以将传输邮箱配置为传输FIFO。在此模式下,优先级顺序由传输请求顺序给出

其效果是,如果加载邮箱0、1、2,则根据邮件的CAN id,它们可以按任意顺序完成。这是因为ID可以将双滚动作为“地址”和消息优先级标记。这种邮箱行为允许程序员自动进行优先级排序

但是,对于大多数类型的通信量,消息应按其排队顺序发送。使用单个邮箱可以防止邮件顺序混乱

所以,也许这就是你所看到的