STM的CAN怎么发扩展帧吗?香城主~

[复制链接]
5236|6
 楼主| 不锈钢铁 发表于 2011-6-7 19:09 | 显示全部楼层 |阅读模式
我最近要用STM8发送一个行业的应用CAN协议,用的是扩展帧ID是32位的,例如,Tx_Id = 0xA633FF00;但我每次发的时候ID的高8位都是错的,这是为什么,而且发送的数据全是0.以下是设置的程序,求高手相助,真的很急,拜托了。Tx_Id = 0xA633FF00;
Tx_IDE = CAN_Id_Extended;
Tx_RTR = CAN_RTR_Data;//数据帧
Tx_DLC = 8;
Tx_Data[3] = (u8)(sp>>8);
Tx_Data[4] = (u8)sp;
CAN_Transmit(Tx_Id,Tx_IDE,Tx_RTR,Tx_DLC,Tx_Data);
 楼主| 不锈钢铁 发表于 2011-6-7 22:25 | 显示全部楼层
怎么我问的技术问题,从来没人鸟。。。。这个板块好冷淡
IJK 发表于 2011-6-8 09:30 | 显示全部楼层
我最近要用STM8发送一个行业的应用CAN协议,用的是扩展帧ID是32位的,例如,Tx_Id = 0xA633FF00;但我每次发的时候ID的高8位都是错的,这是为什么,而且发送的数据全是0.以下是设置的程序,求高手相助,真的很急,拜 ...
不锈钢铁 发表于 2011-6-7 19:09


如果没有记错,扩展帧ID是29位
IJK 发表于 2011-6-8 09:32 | 显示全部楼层
LZ发的标准帧正确吗?
 楼主| 不锈钢铁 发表于 2011-6-8 12:46 | 显示全部楼层
4# IJK 标准帧正常,就是扩展帧的高八位ID不对,我一步步的调试发现,对CAN_MIDR1
寄存器的赋值有问题,给它赋一个数,执行完赋值语句后他是另一个数
 楼主| 不锈钢铁 发表于 2011-6-8 12:48 | 显示全部楼层
3# IJK 对CAN中扩展帧的标识符是29位,加上帧起始和两位控制位是32位,这个倒无所谓,我只发其中的29位标识符就行了。问题是我上面提到的问题,库函数中对CAN_MIDR1寄存器赋值的语句总是出问题,赋的值和我给的不一样
aiyali 发表于 2011-6-8 14:39 | 显示全部楼层
6# 不锈钢铁
CAN->Page.TxMailbox.MIDR1 = (u8)(CAN_Id |CAN_IDE | CAN_RTR);//直接= 不用加|=
巴库函数里面的 这句话 改成这样就行了 等号前 不要加|
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:小鸟快跑

31

主题

730

帖子

5

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