打印

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

[复制链接]
3779|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发的标准帧正确吗?

使用特权

评论回复
5
不锈钢铁|  楼主 | 2011-6-8 12:46 | 只看该作者
4# IJK 标准帧正常,就是扩展帧的高八位ID不对,我一步步的调试发现,对CAN_MIDR1
寄存器的赋值有问题,给它赋一个数,执行完赋值语句后他是另一个数

使用特权

评论回复
6
不锈钢铁|  楼主 | 2011-6-8 12:48 | 只看该作者
3# IJK 对CAN中扩展帧的标识符是29位,加上帧起始和两位控制位是32位,这个倒无所谓,我只发其中的29位标识符就行了。问题是我上面提到的问题,库函数中对CAN_MIDR1寄存器赋值的语句总是出问题,赋的值和我给的不一样

使用特权

评论回复
7
aiyali| | 2011-6-8 14:39 | 只看该作者
6# 不锈钢铁
CAN->Page.TxMailbox.MIDR1 = (u8)(CAN_Id |CAN_IDE | CAN_RTR);//直接= 不用加|=
巴库函数里面的 这句话 改成这样就行了 等号前 不要加|

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:小鸟快跑

32

主题

733

帖子

5

粉丝