【求助】 C851F 单片机 CAN编程

[复制链接]
2792|9
 楼主| arm菜鸟人 发表于 2013-3-25 11:42 | 显示全部楼层 |阅读模式
消息号是指的什么呢?
32个消息对象中,它们的对应号码是怎样的?
 楼主| arm菜鸟人 发表于 2013-3-25 15:27 | 显示全部楼层
如果,不是用CAN报文的过滤功能,是不是不用管消息处理?
渤海三叠浪 发表于 2013-3-25 20:33 | 显示全部楼层
32个消息对象,也可以叫做32个邮箱。

说白了 就是CAN的帧的数据区的8个字节存放的地方。

看LZ现在的状态 我觉得你第一步 应该到新华网网站上下载几个CAN的例子源码。先跑起来再说。

评分

参与人数 1威望 +4 收起 理由
arm菜鸟人 + 4 赞一个!

查看全部评分

渤海三叠浪 发表于 2013-3-25 20:33 | 显示全部楼层
arm菜鸟人 发表于 2013-3-25 15:27
如果,不是用CAN报文的过滤功能,是不是不用管消息处理?

什么叫做消息处理?管他呢。会用就行。我觉得你现在先不用考虑报文过滤。

评分

参与人数 1威望 +4 收起 理由
arm菜鸟人 + 4

查看全部评分

 楼主| arm菜鸟人 发表于 2013-3-25 20:48 | 显示全部楼层
渤海三叠浪 发表于 2013-3-25 20:33
32个消息对象,也可以叫做32个邮箱。

说白了 就是CAN的帧的数据区的8个字节存放的地方。

懂了。我觉得目前还没必要使用过滤功能。谢谢点拨。
 楼主| arm菜鸟人 发表于 2013-4-11 20:38 | 显示全部楼层
渤海三叠浪 发表于 2013-3-25 20:33
什么叫做消息处理?管他呢。会用就行。我觉得你现在先不用考虑报文过滤。 ...

问一个问题,帧ID被放在哪个寄存器里呢?消息掩码寄存器还是消息仲裁寄存器?在不考虑滤波的情形下,使用基本模式,资料上说“在基本模式下,不能取得消息对象相关的控制和状态以及IFx命令掩码寄存器的控制位值”。
 楼主| arm菜鸟人 发表于 2013-4-11 23:05 | 显示全部楼层
将CAN 接收的调试成功了。还有发送,明天继续!
渤海三叠浪 发表于 2013-4-12 10:04 | 显示全部楼层
ID放到 IFx Arbitration Registers里面。寄存器说明在BOSCH can手册的21页。22页有详细说明

评分

参与人数 1威望 +4 收起 理由
arm菜鸟人 + 4 valid inf

查看全部评分

 楼主| arm菜鸟人 发表于 2013-4-12 10:42 | 显示全部楼层
渤海三叠浪 发表于 2013-4-12 10:04
ID放到 IFx Arbitration Registers里面。寄存器说明在BOSCH can手册的21页。22页有详细说明 ...


谢谢你的回复。
发现CAN接收的数据不对,不知道问题在哪。还麻烦你帮着看看。

使用的是基本模式,此时IF1为发送缓冲区,IF2为接收缓冲区。初始化和CAN接收程序见附图。
能够接收数据(在CAN0_Receive函数的 RxOk 里LED正常工作),但是接收到的数据不正确,在图中红色框中的LED不能按预期工作。
详见附图。

顺便问一下CAN波特率的配置:
CAN0BT
Res[15]Tseg2[14:12]Tseg1[11:8]SJWP[7:6]BRPE[5:0]
baud = Fclkcan ÷ (BRPE+1) ÷[(Tseg2 + 1) + (Tseg1 + 1) + (SJWP + 1)]
使用内部时钟 24MHz,提供的例程使用的 1Mbps 波特率,CAN0BT =0x1402
即:Tseg2 = 1, Tseg1 = 4, SJWP = 0, BRPE = 2
baud = 24M ÷ (2+1) ÷ [(1+1)+(4+1)+(0+1)] = 1 M
我配置 500 Kbps时
CAN0BT = 0x1C02
baud = 24M ÷ (2+1) ÷ [(1+1)+(12+1)+(0+1)] = 500 K
但是,发现不能通信,不知何故?
期待您的回复,谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
渤海三叠浪 发表于 2013-4-14 19:34 | 显示全部楼层
接收应该用中断服务程序啊。  还有先用小波特率试试  比如125K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:感染属性。

34

主题

539

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部