打印

CAN 后两个字节数据错误

[复制链接]
2398|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
自然的天逸|  楼主 | 2009-7-11 15:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
香版:你好!我在调试STM32的时候出现后面两个字节数据错误但是接收端没有报错,下面是的我的初始化程序。 

接收在中断里面
void CAN_Polling(void)
{
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

  /* CAN register init */
  CAN_DeInit();
  CAN_StructInit(&CAN_InitStructure);

  /* CAN 初始化 */
      /*用来使能或者失能时间触发通讯模式,可以设置这个参数的值为ENABLE或者DISABLE。*/
  CAN_InitStructure.CAN_TTCM=ENABLE;        

  /*用来使能或者失能自动离线管理,可以设置这个参数的值为ENABLE或者DISABLE*/
  CAN_InitStructure.CAN_ABOM=ENABLE;            
  /*用来使能或者失能自动唤醒模式,可以设置这个参数的值为ENABLE或者DISABLE*/
  CAN_InitStructure.CAN_AWUM=ENABLE;            
  /*用来使能或者失能非自动重传输模式,可以设置这个参数的值为ENABLE或者DISABLE*/
  CAN_InitStructure.CAN_NART=DISABLE;            
  /*用来使能或者失能接收FIFO锁定模式,可以设置这个参数的值为ENABLE或者DISABLE*/
  CAN_InitStructure.CAN_RFLM=DISABLE;            
  /*用来使能或者失能发送FIFO优先级,可以设置这个参数的值为ENABLE或者DISABLE*/
  CAN_InitStructure.CAN_TXFP=ENABLE;
      /*硬件工作在环回模式*/            
  CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//CAN_Mode_Normal;//CAN_Mode_LoopBack;//CAN_Mode_Silent_LoopBack;//硬件工作在静默环回模式
  /*波特率计算公式
  can时钟是RCC_APB1PeriphClock,你要注意CAN时钟频率 
CAN波特率 = RCC_APB1PeriphClock/(CAN_SJW+CAN_BS1+CAN_BS2)/CAN_Prescaler);*/ 
/*重新同步跳跃宽度1个时间单位*/
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
      /*定义采样点的位置*/
  CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;        /*时间段1为8个时间单位*/
    /*定义发送点的位置*/
  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
   /*设定了一个时间单位的长度*/        
  CAN_InitStructure.CAN_Prescaler=9;          
  CAN_Init(&CAN_InitStructure);

  /* CAN filter init */
  /*指定了待初始化的过滤器,它的范围是1到13*/
  CAN_FilterInitStructure.CAN_FilterNumber=0;
  /*标识符屏蔽位模式*/
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  /*1个32位过滤器*/
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  /*设定过滤器标识符高端*/
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
  /*设定过滤器标识符低端*/
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  /*设定过滤器屏蔽标识符或者过滤器标识符*/
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  /*设定过滤器屏蔽标识符或者过滤器标识符*/
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  /*设定了指向过滤器的FIFO(0或1)*/
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  /*使能或者失能过滤器。该参数可取的值为ENABLE或者DISABLE*/
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;

  CAN_FilterInit(&CAN_FilterInitStructure);     

   /* FIFO0消息挂号中断屏蔽 */ 
   CAN_ITConfig(CAN_IT_FMP0, ENABLE);
}    
/***************************************************************************************
** 函数名称: CanTxd;
** 功能描述: 发送数据
** 参    数: id 标识符 DLC数据长度  Fdata数据内容
** 返 回 值: None       
** 作   者: 
** 日   期: 2009年2月03日
**--------------------------------------------------------------------------------------
** 修 改 人: 
** 日   期: 
**--------------------------------------------------------------------------------------
****************************************************************************************/
void CanTxd(u16 Id,u8 DLC, u8 *Fdata)
{
    CanTxMsg TxMessage;
    u8 TransmitMailbox,i;
    Fdata=Fdata;
    
          /*StdId用来设定标准标识符。它的取值范围为0到0x7FF*/
  TxMessage.StdId=Id;
   RxMessage.ExtId=0x00;
  /*数据帧*/
  TxMessage.RTR=CAN_RTR_DATA;
  /*使用标准标识符*/
  TxMessage.IDE=CAN_ID_STD;
/*传送数据长度DLC个字节*/
  TxMessage.DLC=DLC;
/*包含了待传输数据,它的取值范围为0到*/
for(i=0;i<DLC;i++)
{
  TxMessage.Data=*Fdata++;
}
  /* 开始一个消息的传输 */
  TransmitMailbox=CAN_Transmit(&TxMessage);
  i=0;
/*检查是否在传送数据*/
while((CAN_TransmitStatus(TransmitMailbox)!=CANTXOK)&&(i!=0xFF))i++;
i=0;
/*返回挂号的信息数量*/
  while((CAN_MessagePending(CAN_FIFO0)<1)&&(i!=0xFF))
    i++;
   OSTimeDly (1);        /*延时1*/
}
    
沙发
自然的天逸|  楼主 | 2009-7-11 15:04 | 只看该作者

CAN 后两个字节数据错误

请帮忙看一下谢谢

使用特权

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

本版积分规则

11

主题

370

帖子

1

粉丝