TVII CAN例程使用问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
LeeChung
Level 1
Level 1
10 sign-ins 5 sign-ins First question asked

请教一下,我在调试TVII-B-E-1M- SK开发板时,使用Classic_CAN例程,文件目录如下: TVII_Sample_Driver_Library_7.1.0\tviibe1m\src\examples\canfd\Classic_CAN\main_cm4.c

出现的问题是:当我不修改源代码,只在main函数的for循环添加如下代码做周期发送frame时,

LeeChung_2-1649734175698.png

 

LeeChung_0-1649733945425.png

CAN卡收到的报文是错误的,这是CAN卡采集到的报文,而理想的报文应该是每个Byte间数据递增。

LeeChung_1-1649734038296.png

请问你们知道是哪里出了问题吗

 

0 点赞
1 解答
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi LeeChung,

每个 stcMsg.dataConfig.data 有 4 个字节。
因此,对于classic CAN,data[0] 和 data[1] 已经有 8 个字节的数据。
stcMsg.dataConfig.data[0] = (temp_cnt) + ((temp_cnt + 1) <<  8 ) + ((temp_cnt + 2) << 16) + + ((temp_cnt + 3) << 24);
stcMsg.dataConfig.data[1] = (temp_cnt + 4) + ((temp_cnt + 5) <<  8 ) + ((temp_cnt + 6) << 16) + + ((temp_cnt + 7) << 24);

如果 temp_cnt=1,报文则显示应为例如 01 02 03 04 05 06 07 08

Best regards

在原帖中查看解决方案

0 点赞
1 回复
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi LeeChung,

每个 stcMsg.dataConfig.data 有 4 个字节。
因此,对于classic CAN,data[0] 和 data[1] 已经有 8 个字节的数据。
stcMsg.dataConfig.data[0] = (temp_cnt) + ((temp_cnt + 1) <<  8 ) + ((temp_cnt + 2) << 16) + + ((temp_cnt + 3) << 24);
stcMsg.dataConfig.data[1] = (temp_cnt + 4) + ((temp_cnt + 5) <<  8 ) + ((temp_cnt + 6) << 16) + + ((temp_cnt + 7) << 24);

如果 temp_cnt=1,报文则显示应为例如 01 02 03 04 05 06 07 08

Best regards

0 点赞