打印

STM32 CAN 问题

[复制链接]
5864|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ploto|  楼主 | 2009-5-3 18:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用STM32的CAN时,按以下方式使用,发现问题(可能不算是问题)
有(且仅有)两块板子A和B,都是STM32,硬件上焊接了收发器和终端电阻。
A一上电就通过CAN发送一帧数据,B仅仅是接收。

如果B先上电,A再上电,CAN灯闪一下,数据发送成功。
如果A先上电,由于B没有上电,因此A发送不成功,CAN灯一直亮,用示波器检测数据,发现在不停地重发;如果此时B再上电,B无法接收数据,CAN灯不灭。

检查原因,B板子在CAN初始化过程中返回失败。检查用户手册(中文版),有如下的说明“......在跟CAN总线取得同步,即在CANRX引脚上监测到11个连续的隐性位(等效于总线空闲)后,bxCAN才能正常接收和发送报文......”。看来由于A在不停地发送数据,B的CAN模块无法与CAN总线取得同步,导致初始化失败。

有没有什么办法让B能够初始化成功?把A的数据读取,让总线恢复正常?
沙发
ijk| | 2009-5-4 09:50 | 只看该作者

问题不难解决

  问题不难解决:当A长时间发送不成功,可以停止它的发送,等待一段时间后重新再发送;B在CAN初始化过程中返回失败,可以等待短时间后再次(或多次)进行CAN初始化。

使用特权

评论回复
板凳
ploto|  楼主 | 2009-5-4 16:35 | 只看该作者

谢谢

看来也只有这个办法了。.....

使用特权

评论回复
地板
511| | 2009-9-7 14:23 | 只看该作者
受教,,,

使用特权

评论回复
5
1456276911| | 2014-6-25 15:23 | 只看该作者
你好,请教一下,stm32 Can_MessagePending要手动清零吗?我是通过查询的方式检测是否有数据
库函数中的这个函数是这样写的
uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber)
{
  uint8_t message_pending=0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FIFO(FIFONumber));
  if (FIFONumber == CAN_FIFO0)
  {
    message_pending = (uint8_t)(CANx->RF0R&(uint32_t)0x03);
  }
  else if (FIFONumber == CAN_FIFO1)
  {
    message_pending = (uint8_t)(CANx->RF1R&(uint32_t)0x03);
  }
  else
  {
    message_pending = 0;
  }
  return message_pending;
}

使用特权

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

本版积分规则

7

主题

99

帖子

0

粉丝