HXHCX 2022-07-29 15:06 采纳率: 0%
浏览 53
已结题

STM32CAN通信

问题遇到的现象和发生背景

将STM32ZET6的CAN通信代码移植到RCT6里,无法通信

问题相关代码,请勿粘贴截图

主函数进入: Can_Send_Msg(canbuf,8);CAN发送函数后,


u8 Can_Send_Msg(u8* msg,u8 len)
{    
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0;                     // 标准标识符 
  TxMessage.ExtId=PASS_ID;                   // 设置扩展标示符 
  TxMessage.IDE=CAN_Id_Extended; // 扩展帧
  TxMessage.RTR=CAN_RTR_Data;         // 数据帧
  TxMessage.DLC=len;                        // 要发送的数据长度
  for(i=0;i<len;i++)
  TxMessage.Data[i]=msg[i];                      
  mbox= CAN_Transmit(CAN1, &TxMessage);  //返回发送邮箱号 
  i=0;
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;    //等待发送结束
  if(i>=0XFFF)return 1;
  return 0;        
}

在 mbox= CAN_Transmit(CAN1, &TxMessage); //返回发送邮箱号 这报错

运行结果及报错内容

通过DEBUG调试, mbox= CAN_Transmit(CAN1, &TxMessage); 发现在这出错:
正常发送:

img

其TSR寄存器的值为3,但是移植到RCT6后其值为9.
9就是位3和位1为1,查看CAN的发送管理:
位3 :
TERR0: 邮箱0发送失败
当邮箱0因为出错而导致发送失败时,对该位置1。

我的解答思路和尝试过的方法

查资料说CAN.c和.h文件的配置都是通用的,只用考虑不同型号的单片机对CAN通信的时钟频率不一样的问题,但是通过函数发现其时钟都是36M都不用修改。
参考:https://liu-endong.blog.csdn.net/article/details/112016178

我想要达到的结果

知道TERR0出错的原因,如何修改

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 8月3日
    • 修改了问题 8月3日
    • 赞助了问题酬金5元 7月29日
    • 创建了问题 7月29日

    悬赏问题

    • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
    • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
    • ¥15 神经网络模型一直不能上GPU
    • ¥15 苍穹外卖拦截器token为null
    • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
    • ¥20 wpf datagrid单元闪烁效果失灵
    • ¥15 券商软件上市公司信息获取问题
    • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
    • ¥15 Android studio AVD启动不了
    • ¥15 陆空双模式无人机怎么做