OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7169|回复: 9

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

[复制链接]

23

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
365
金钱
365
注册时间
2018-3-21
在线时间
64 小时
发表于 2021-2-18 14:35:35 | 显示全部楼层 |阅读模式
10金钱
当前调试CAN 通信,用的是STM32F4的开发板,使用的也是正点的例程跑,自测用例回环模式通信没问题

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

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


CAN1_Mode_Init(CAN_SJW_1TQ,CAN_BS2_6TQ,CAN_BS1_7TQ,6,CAN_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* msg,u8 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) {}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
365
金钱
365
注册时间
2018-3-21
在线时间
64 小时
 楼主| 发表于 2021-2-18 16:50:51 | 显示全部楼层
我其他不修改,只是把回环模式改成正常模式,然后还是同样的问题,发送不出去数据,如果说can不接另一块板子,单纯就是发送,可以发送出去数据么
回复

使用道具 举报

23

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
365
金钱
365
注册时间
2018-3-21
在线时间
64 小时
 楼主| 发表于 2021-2-18 16:55:16 | 显示全部楼层
回环模式CAN_MODE_LOOPBACK测试没有问题,改成CAN_MODE_NORMAL之后,其他程序都不更改,发现发送数据就发送不出去了,接设备和不接设备都发送不出去
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7462
金钱
7462
注册时间
2015-1-15
在线时间
1367 小时
发表于 2021-2-18 20:56:01 | 显示全部楼层
CAN单独一个不行,要两个以上,你找个USB转CAN调试工具试试
一分耕耘一分收获。
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2021-2-19 11:06:14 | 显示全部楼层
参考下官方CAN例程,里面都是正常模式
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2021-10-20
在线时间
3 小时
发表于 2022-9-9 10:35:55 | 显示全部楼层
帮订一下,碰到了类似的问题。
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-8-9
在线时间
16 小时
发表于 2022-9-9 14:50:14 | 显示全部楼层
之前自己画的CAN通信板子也遇到过这种问题,最后才发现是32上CAN的TXD和RXD虚焊了,楼主可以进调试看看CAN的几个状态位,我当时显示好像是bit0 错误还是bit1错误
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2023-1-30
在线时间
3 小时
发表于 2023-12-5 14:48:59 | 显示全部楼层
        while (!HAL_FDCAN_GetTxFifoFreeLevel(hfdcan))         {         bsp_DelayUS(10);         }    帮顶一下,我也卡死在这里了
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2023-12-14
在线时间
5 小时
发表于 2023-12-15 19:55:57 来自手机 | 显示全部楼层
随风飘动 发表于 2021-2-18 16:55
回环模式CAN_MODE_LOOPBACK测试没有问题,改成CAN_MODE_NORMAL之后,其他程序都不更改,发现发送数据就发送 ...

你回环没有问题的话。大概率是电路问题。比如阻抗匹配和tx。rx是否接反还有电感滤波,要不就是canbuffer的。你仔细找找吧也有可能有其他问题。但我知道的就这么多了
回复

使用道具 举报

13

主题

263

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5337
金钱
5337
注册时间
2017-8-14
在线时间
236 小时
发表于 2023-12-27 10:37:18 | 显示全部楼层
本帖最后由 zml13917492379 于 2023-12-27 10:39 编辑

CAN通信的完美编程需要对CAN的通信负载及通信质量进行监控:
CAN通信实时负载小于标定负载的1/3,通过对CAN通信的丢包的监控来评估CAN的通信质量;
详细资料见:CAN通信的高层协议CANWeb源程序及介绍
http://www.openedv.com/forum.php ... d=109854&extra=
详细资料扣扣群204408503自行下载
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 17:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表