查看: 4483|回复: 5

[其他] 用pe生成的can发送函数不能发数据

[复制链接]

该用户从未签到

19

主题

79

帖子

0

中级会员

Rank: 3Rank: 3

积分
319
最后登录
2015-8-4
发表于 2014-11-4 08:52:22 | 显示全部楼层 |阅读模式
这个是生成的发送函数
LDD_TError CAN1_SendFrame(LDD_TDeviceData *DeviceDataPtr, LDD_CAN_TMBIndex BufferIdx, LDD_CAN_TFrame *Frame)
{
  CAN1_TDeviceData *DeviceDataPrv = (CAN1_TDeviceData *)DeviceDataPtr;
  LDD_CAN_TBufferMask BufferMask;      /* Bitmask of the requested message buffer */
  uint8_t TxMBCode = 0x00U;            /* Temporary value of MB code */
  uint32_t StatusReg = CAN_PDD_GetStatusInterruptFlags1(CAN0_BASE_PTR); /* Read content of the status register */
  uint8_t DataIndex;

  if (BufferIdx > DeviceDataPrv->MaxBufferIndex) { /* Is BufferIdx greater than MaxBuffers? */
    return ERR_PARAM_RANGE;            /* If yes then error */
  }
  BufferMask = (LDD_CAN_TBufferMask)(0x01UL << BufferIdx);
  if ((BufferMask & DeviceDataPrv->TxBufferMask) == 0x00U) { /* Is used buffer defined of BufferIdx for transmit? */
    return ERR_PARAM_INDEX;            /* If no then error */
  }
  if (Frame->Length > DeviceDataPrv->MaxDataLen) { /* Is number of data greater than MaxDataLen? */
    return ERR_PARAM_LENGTH;           /* If yes then error */
  }
  if (Frame->FrameType > LDD_CAN_RESPONSE_FRAME) { /* Is FrameType other than LDD_CAN_DATA_FRAME_STD, LDD_CAN_DATA_FRAME_EXT or LDD_CAN_REMOTE_FRAME? */
    return ERR_PARAM_ATTRIBUTE_SET;    /* If yes then error */
  }
  if ((StatusReg & (CAN_PDD_RECEIVING_MESSAGE | CAN_PDD_TRANSMITTING_MESSAGE)) != 0x00U) { /* Are both IDLE and TX/RX bits of the status register cleared?*/
    return ERR_BUSY;                   /* If yes then error */
  }
  /* {Default RTOS Adapter} Critical section begin, general PE function is used */
  EnterCritical();
  CAN_PDD_SetMessageBufferCode(CAN0_BASE_PTR, BufferIdx, CAN_PDD_MB_TX_NOT_ACTIVE); /* Set TX Buffer Inactive */
  if ((Frame->MessageID & LDD_CAN_MESSAGE_ID_EXT) != 0x00U) { /* Is the frame configured as Extended ID? */
    CAN_PDD_SetMessageBufferID(CAN0_BASE_PTR, BufferIdx, CAN_PDD_BUFFER_ID_EXT, (Frame->MessageID)&~(LDD_CAN_MESSAGE_ID_EXT)); /*Assign extended ID to buffer */
    CAN_PDD_EnableMessageBufferIDExt(CAN0_BASE_PTR, BufferIdx, PDD_ENABLE); /*Set ID extended */
  } else {
    CAN_PDD_SetMessageBufferID(CAN0_BASE_PTR, BufferIdx, CAN_PDD_BUFFER_ID_STD, Frame->MessageID); /*Assign Standard ID to buffer */
    CAN_PDD_EnableMessageBufferIDExt(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /*Set ID standard */
  }
  if ((Frame->FrameType == LDD_CAN_DATA_FRAME)||(Frame->FrameType == LDD_CAN_RESPONSE_FRAME)) { /* Is it a data or WaitOnRemote frame? */
    for (DataIndex = 0x00U; DataIndex < Frame->Length; DataIndex++) { /* Fill message buffer data array */
      CAN_PDD_SetMessageBufferData(CAN0_BASE_PTR, BufferIdx, DataIndex, Frame->Data[DataIndex]);
    }
    CAN_PDD_SetMessageBufferDataLength(CAN0_BASE_PTR, BufferIdx, Frame->Length); /* Set the length of the message */
    CAN_PDD_EnableMessageBufferRTR(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /* Clear RTR bit */
    CAN_PDD_EnableMessageBufferSRR(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /* Clear SRR bit */
    if (Frame->FrameType == LDD_CAN_DATA_FRAME) {
      TxMBCode = CAN_PDD_MB_TX_DATA_FRAME; /* Set bufer as a transmit buffer */
    } else {
      TxMBCode = CAN_PDD_MB_TX_RESPONSE_FRAME; /* Set bufer as a response transmit buffer for remote frames */
    }
  } else {                             /* Remote frame */
    TxMBCode = CAN_PDD_MB_TX_REMOTE_FRAME; /* Set Tx bufer for remote frames */
    CAN_PDD_SetMessageBufferDataLength(CAN0_BASE_PTR, BufferIdx, 0x00U); /* Set the length of the message */
    CAN_PDD_EnableMessageBufferRTR(CAN0_BASE_PTR, BufferIdx, PDD_ENABLE); /* Set the message as a remote frame */
    if ((Frame->MessageID & LDD_CAN_MESSAGE_ID_EXT) != 0x00U) { /* Extended frame */
      CAN_PDD_EnableMessageBufferSRR(CAN0_BASE_PTR, BufferIdx, PDD_ENABLE); /* Set SRR bit */
    } else {                           /* Standard frame */
      CAN_PDD_EnableMessageBufferSRR(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /* Clear SRR bit */
    }
  }
  CAN_PDD_SetMessageBufferCode(CAN0_BASE_PTR, BufferIdx, TxMBCode); /* Set code for Tx buffer of the message */
  /* {Default RTOS Adapter} Critical section end, general PE function is used */
  ExitCritical();
  return ERR_OK;
}
主函数是这样写的
while(1)
  {   
         aa.MessageID=0x01;
                   aa.FrameType=0;
                   aa.Data=bb;
                  aa.Length=0x08;
                  // aa.TimeStamp=0x0f;
         // aa.LocPriority=2;
          //CAN1_ReadFrame(DeviceDataPtr,0x03,&aa);
          delay();
          CAN1_SendFrame(Prv,0x01,&aa);
          delay();  
  }
可是从串口助手看不到数据,用示波器看到的high和low两根线都是4.8v左右,没有变化,我是新手,哪位大神可以给我指导一下!!!!

我知道答案 目前已有5人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6031
    最后登录
    2025-8-21
    发表于 2014-11-4 08:57:30 | 显示全部楼层
    楼主你好
    请问你是用什么外部工具调试的CAN网,为什么说串口看不到信息呢?

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19

    主题

    79

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    319
    最后登录
    2015-8-4
     楼主| 发表于 2014-11-4 08:57:56 | 显示全部楼层
    zlgcantest
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19

    主题

    79

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    319
    最后登录
    2015-8-4
     楼主| 发表于 2014-11-4 08:58:32 | 显示全部楼层
    FSL_TICS_Robin 发表于 2014-11-4 08:57
    楼主你好
    请问你是用什么外部工具调试的CAN网,为什么说串口看不到信息呢?

    主要是示波器也看不到任何变化
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6031
    最后登录
    2025-8-21
    发表于 2014-11-4 09:00:46 | 显示全部楼层
    勇願噯伱 发表于 2014-11-4 08:58
    主要是示波器也看不到任何变化

    那就说明没有成功发送
    建议你先参考:【经验分享】K40D100M CW PE工程的 CAN回环测试程序能否正常收发。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    102

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    413
    最后登录
    2016-12-7
    发表于 2015-3-21 14:11:50 | 显示全部楼层
    PE生成的can send函数应该可以发送,can read函数感觉不行啊,中断都进不去。求指导
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-12 13:30 , Processed in 0.201309 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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