OpenEdv-开源电子网

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

F407的can通信数据错误问题

[复制链接]

4

主题

9

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2021-2-26
在线时间
3 小时
发表于 2021-2-26 16:11:44 | 显示全部楼层 |阅读模式
1金钱
使用模块板自带发送函数u8 CAN1_Send_Msg(u8* msg,u32 extid,u8 len)
{       
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x00;         // 标准标识符为0,范围为0x0~0x7FF;
  //TxMessage.StdId=0x12;         // 标准标识符为0
  TxMessage.ExtId=extid;         // 设置扩展标示符(29位)
  //TxMessage.ExtId=0x03;         // 设置扩展标示符(29位)
  TxMessage.IDE=CAN_ID_EXT;                  // 使用扩展标识符
  TxMessage.RTR=0;                  // 消息类型为数据帧,一帧8位
  TxMessage.DLC=len;                                                         // 发送两帧信息
                     
  for(i=0;i<len;i++)
          {
  TxMessage.Data=msg;                                 // 第一帧信息         
  mbox= CAN_Transmit(CAN1, &TxMessage);   
  i=0;
          }

设置发送  01 00 00 50 00 00 00 02  结果用can模块监控到的数据是00 00 0F 00 20 60 00 00
请教各位大神,这是怎么回事?ID监控到是正常的。为什么数据错误?

补充:使用的库版本
  * @file    stm32f4xx_can.c
  * @Author  MCD Application Team
  * @version V1.0.2

最佳答案

查看完整内容[请看2#楼]

问题解决了,for(i=0;i
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2021-2-26
在线时间
3 小时
 楼主| 发表于 2021-2-26 16:11:45 | 显示全部楼层
问题解决了,for(i=0;i<len;i++)
          {
  TxMessage.Data=msg;                                 // 第一帧信息         
  mbox= CAN_Transmit(CAN1, &TxMessage);   
  i=0;
          }
这个地方我给加了两个中括号,仿真看,程序不经过这里直接跳过去,把中括号删除后,改为正常模式,现在发出的数据正常了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2021-2-27 01:03:27 | 显示全部楼层
直接2个开发板通信试试?波特率不对?
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2021-2-26
在线时间
3 小时
 楼主| 发表于 2021-2-27 10:02:57 | 显示全部楼层
本帖最后由 weilai2021 于 2021-2-27 10:05 编辑
正点原子 发表于 2021-2-27 01:03
直接2个开发板通信试试?波特率不对?

只有一个开发板,一个can调试器,看了网上说的
最重要的就是:CAN_Transmit()


在stm32f4xx_can.c文件中


如果用例程,使用扩展帧的时候一直都失败


所以需要修改的地方如下:


      assert_param(IS_CAN_EXTID(TxMessage->ExtId));


      CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \


                                                  TxMessage->IDE<<2 | \


                                                  TxMessage->RTR<<1);
————————————————
版权声明:本文为CSDN博主「zjghzz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28317769/article/details/99425340



按照上述修改了以后,ID发出来也是不对的,后来将回环模式改为正常模式后,发出的数据帧还是不对,而且会变化
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2021-2-26
在线时间
3 小时
 楼主| 发表于 2021-2-27 10:04:09 | 显示全部楼层
weilai2021 发表于 2021-2-27 10:02
只有一个开发板,一个can调试器,看了网上说的最重要的就是:CAN_Transmit()

&#160;在stm32f4xx_can ...

最重要的就是:CAN_Transmit()

&#160;在stm32f4xx_can.c文件中

有乱码,网上一个博主说是这样的:如果用例程,使用扩展帧的时候一直都失败

所以需要修改的地方如下:

&#160;&#160;&#160;&#160;&#160;&#160;assert_param(IS_CAN_EXTID(TxMessage->ExtId));

&#160;&#160;&#160;&#160;&#160;&#160;CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TxMessage->IDE<<2 | \

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TxMessage->RTR<<1);
————————————————
版权声明:本文为CSDN博主「zjghzz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28317769/article/details/99425340
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 12:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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