STM32 CAN 在总线断开的时候怎么检测发送成功

2019-07-21 06:04发布



    STM32 CAN 在总线断开的时候怎么检测发送成功,现在两个节点互发数据 我把数据线断开怎么还是发送成功呢?

                          if(CAN_GetFlagStatus(CAN1,CAN_FLAG_BOF)==SET)
                        LCD_ShowString(60+80,190,200,16,16,"Failed");                //提示发送失败
                        else LCD_ShowString(60+80,190,200,16,16,"OK    ");                         //提示发送成功       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
1010422901
1楼-- · 2019-07-21 23:45
本帖最后由 1010422901 于 2018-12-17 10:14 编辑

检测can邮箱发送状态,调用这个函数可以查看 ---CAN_TransmitStatus,楼主上面用的函数是用来查看有没有进入busoff的状态,同时楼主需明白,can总线需通信成功,必须同时存在两个节点,单独一个节点通信是不会成功,类型于发送节点can数据
需有接收节点ACK应答机制。
通过上面函数就可以知道如下四种状态
#define CAN_TxStatus_Failed         ((uint8_t)0x00)/*!< CAN transmission failed */
#define CAN_TxStatus_Ok             ((uint8_t)0x01) /*!< CAN transmission succeeded */
#define CAN_TxStatus_Pending        ((uint8_t)0x02) /*!< CAN transmission pending */
#define CAN_TxStatus_NoMailBox      ((uint8_t)0x04) /*!< CAN cell did not provide an empty mailbox */

就可以判断是否成功
swa00000
2楼-- · 2019-07-22 03:37
1010422901 发表于 2018-12-17 10:11
检测can邮箱发送状态,调用这个函数可以查看 ---CAN_TransmitStatus,楼主上面用的函数是用来查看有没有进 ...

你的意思是 接受节点需要加条回应机制才可以?
zml13917492379
3楼-- · 2019-07-22 05:41
 精彩回答 2  元偷偷看……

一周热门 更多>