STM32 CAN 正常模式接收失败

参照战舰的STM32实验25的历程进行修改,但是单片机之间通讯出了问题,一块用来发送数据,在CANL、CANH之间的另一端单片机收数据但是接收没法进中断。voidUSB_... 参照战舰的STM32实验25的历程进行修改 ,但是单片机之间通讯出了问题,一块用来发送数据,在CANL、CANH之间的另一端单片机收数据但是接收没法进中断。

void USB_LP_CAN1_RX0_IRQnHandler(void)
{
CanRxMsg RxMessage;
CAN_Receive(CAN1, 0, &RxMessage);
//for(uint8_t i=0;i<8;i++)
LCD_WriteEnglishSring(20,4,"succeed!");

}

uint8_t Can_Send_Msg(uint8_t* msg,uint8_t len)
{
uint8_t mbox;
u16 i=0;
CanTxMsg TxMessage;
TxMessage.StdId=0x1BC;
TxMessage.ExtId=0x12;
TxMessage.IDE=0;
TxMessage.RTR=0;
TxMessage.DLC=len;
for(i=0;i<len;i++)
TxMessage.Data[i]=msg[i];
mbox= CAN_Transmit(CAN1, &TxMessage);
i=0;
while((CAN_TransmitStatus(CAN1, mbox)==CANTXFAILED)&&(i<0XFFF))i++;

if(i>=0XFFF)return 1;

return 0;
}

uint8_t Can_Receive_Msg(uint8_t *buf)
{
uint32_t i;
CanRxMsg RxMessage;
if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0;
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
for(i=0;i<8;i++)
buf[i]=RxMessage.Data[i];
return RxMessage.DLC;
}

程序返回时:if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0;
始终为零。

while(1)
{
for(i=0;i<8;i++)
{
canbuf[i]=i*2;
}
res=Can_Send_Msg(canbuf,8);
if(!res) GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);
key=Can_Receive_Msg(buf);
}
展开
 我来答
百度网友b12a2e039
2015-06-18 · TA获得超过1533个赞
知道小有建树答主
回答量:819
采纳率:0%
帮助的人:692万
展开全部
线用回环模式测试,如果回环模式通过,则表示CAN总线驱动无问题,只和外部电路有关。
如果回环都接收不到说明是程序问题。
追问
回环模式再收寄存器和发寄存器里都是同样的数据 但是正常模式下却没有了
追答
那应该是可以确定是外部电路问题,不发送的时候测量总线电平是否为2.3.如果不是修改一下并联电阻阻值
01降临10
2017-06-26
知道答主
回答量:5
采纳率:0%
帮助的人:4135
展开全部
应该是匹配电阻的问题,如果你只有两个点的话,你可以把其中一个匹配电阻改成60欧左右的试一下(前提是你的回环模式是正常的)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式