电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
STM32的CAN通信发送邮箱一直是满的,陷入死循环
已解决
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;
}
w
hile(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)
最佳答案
莱克迷KW
可以监测一下CAN总线的数据与状态,看是不是总线上的故障
发布于
2021-02-19
举报
评论 0
0
0
其他答案
数量:
1
耳根的耳根
这说明外部的can节点不通,那发送的时候会一直在等,送不出去。检查你的外部连接是否正确?
你是怎么连接的呢?
发布于
2021-02-20
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
STM32的CAN通信发送邮箱一直是满的,陷入死循环
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: