• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32的CAN通信发送邮箱一直是满的,陷入死循环

韩梅梅 2021-02-19 浏览量:9179
当前调试CAN 通信,用的是STM32F4的开发板,使用的也是正点的例程跑,自测用例回环模式通信没问题

我现在想和一个CAN 设备通信,修改为了CAN_MODE_NORMAL,使用的是扩展帧,然后过滤器设置的全为0,当前值挂载了一个传感器,

我想发一条消息,结果死在了发送邮箱的while循环里


CAN1_Mode_Init(CAN_SJW_1TQCAN_BS2_6TQCAN_BS1_7TQ6CAN_MODE_NORMAL);        
CAN_Config();


void CAN_Config(void)
{
  CAN_FilterTypeDef  sFilterConfig;

  /@@*##-2- Configure the CAN Filter ###########################################*/
  sFilterConfig.FilterBank = 0;
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;
  sFilterConfig.FilterMaskIdLow = 0x0000;
  sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
  sFilterConfig.FilterActivation = ENABLE;
  sFilterConfig.SlaveStartFilterBank = 14;

}

u8 CAN1_Send_Msg(u8* msgu8 len)
{       
    u8 i=0;
        u32 TxMailbox;
        u8 message[8];
    //TxHeader.StdId=0x00;//0X12;        //标准标识符
    TxHeader.ExtId=0x08042320;//PRESS_O_R_PERIP_ID;//0x12;        //扩展标识符(29位)
    TxHeader.IDE=CAN_ID_EXT;//CAN_ID_STD;    //使用标准帧
    TxHeader.RTR=CAN_RTR_DATA;  //数据帧
    TxHeader.DLC=len;               
    for(i=0;i<len;i++)
    {
                message=msg;
        }
    if(HAL_CAN_AddTxMessage(&CAN1_Handler &TxHeader message &TxMailbox) != HAL_OK)//发送
        {
                return 1;
        }
        while(HAL_CAN_GetTxMailboxesFreeLevel(&CAN1_Handler) != 3) {}
    return 0;
}


当前就是死在了这里,得到的值位0,所以不知道什么原因导致的。麻烦请教一下
while(HAL_CAN_GetTxMailboxesFreeLevel(&CAN1_Handler) != 3) {}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 可以监测一下CAN总线的数据与状态,看是不是总线上的故障
    • 发布于 2021-02-19
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 这说明外部的can节点不通,那发送的时候会一直在等,送不出去。检查你的外部连接是否正确?

    你是怎么连接的呢?

    • 发布于2021-02-20
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32的CAN通信发送邮箱一直是满的,陷入死循环