OpenEdv-开源电子网

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

发送邮箱查找失败

[复制链接]

16

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-7-28
在线时间
2 小时
发表于 2015-7-16 13:57:10 | 显示全部楼层 |阅读模式
5金钱
在查找邮箱时一直显示查找失败,寄存器操作,不知道什么原因

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

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-7-16 14:52:01 | 显示全部楼层
开往春天的手扶拖拉机
回复

使用道具 举报

16

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-7-28
在线时间
2 小时
 楼主| 发表于 2015-7-16 15:20:43 | 显示全部楼层
回复【2楼】zuozhongkai:
----------------------------
发送邮箱,在原子哥的例程里,
u8 Can_Tx_Msg(u32 id,u8 ide,u8 rtr,u8 len,u8 *dat)
{    
u8 mbox;   
if(CAN1->TSR&(1<<26))mbox=0; //邮箱0为空
else if(CAN1->TSR&(1<<27))mbox=1; //邮箱1为空
else if(CAN1->TSR&(1<<28))mbox=2; //邮箱2为空
else return 0XFF; //无空邮箱,无法发送 
CAN1->sTxMailBox[mbox].TIR=0; //清除之前的设置
if(ide==0) //标准帧
{
id&=0x7ff;//取低11位stdid
id<<=21;   
}else //扩展帧
{
id&=0X1FFFFFFF;//取低32位extid
id<<=3;    
}
CAN1->sTxMailBox[mbox].TIR|=id;  
CAN1->sTxMailBox[mbox].TIR|=ide<<2;   
CAN1->sTxMailBox[mbox].TIR|=rtr<<1;
len&=0X0F;//得到低四位
CAN1->sTxMailBox[mbox].TDTR&=~(0X0000000F);
CAN1->sTxMailBox[mbox].TDTR|=len;    //设置DLC.
//待发送数据存入邮箱.
CAN1->sTxMailBox[mbox].TDHR=(((u32)dat[7]<<24)|
((u32)dat[6]<<16)|
  ((u32)dat[5]<<8)|
((u32)dat[4]));
CAN1->sTxMailBox[mbox].TDLR=(((u32)dat[3]<<24)|
((u32)dat[2]<<16)|
  ((u32)dat[1]<<8)|
((u32)dat[0]));
CAN1->sTxMailBox[mbox].TIR|=1<<0; //请求发送邮箱数据
return mbox;
}
回复

使用道具 举报

16

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-7-28
在线时间
2 小时
 楼主| 发表于 2015-7-16 15:37:57 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
这个邮箱找的是0号邮箱,接着进入函数
u8 Can_Tx_Staus(u8 mbox)
{
u8 sta=0;     
switch (mbox)
{
case 0: 
sta |= CAN1->TSR&(1<<0); //RQCP0
sta |= CAN1->TSR&(1<<1); //TXOK0
sta |=((CAN1->TSR&(1<<26))>>24); //TME0
break;
case 1: 
sta |= CAN1->TSR&(1<<8)>>8; //RQCP1
sta |= CAN1->TSR&(1<<9)>>8; //TXOK1
sta |=((CAN1->TSR&(1<<27))>>25); //TME1    
break;
case 2: 
sta |= CAN1->TSR&(1<<16)>>16; //RQCP2
sta |= CAN1->TSR&(1<<17)>>16; //TXOK2
sta |=((CAN1->TSR&(1<<28))>>26); //TME2
break;
default:
sta=0X05;//邮箱号不对,肯定失败.
break;
}
return sta;

查到这里的时候邮箱仲裁丢失,返回sta =0x05
回复

使用道具 举报

16

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-7-28
在线时间
2 小时
 楼主| 发表于 2015-7-16 19:24:31 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
我用我的板子不能启动发送,也就是说,TXRQ没法被置一,这个在追踪寄存器看到的。用原子的MINI可以启动发送,但是在正常模式下不能发送成功,在环回模式可以
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-16 21:55:25 | 显示全部楼层
回复【5楼】北冥鱼:
---------------------------------
正常的CAN通信,必须有2个节点,你接了2个节点么?
否则必定失败。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 08:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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