打印
[CAN-bus/DeviceNet]

stm32 can多机通信

[复制链接]
3673|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ar_m_cu|  楼主 | 2009-5-13 21:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
软件环境 IAR4.42+JLINK   板子是自己参照万利的做得,用的是2.0的固件库

仿真提示是 主机发送错误  不知是什么原因,各位老大帮忙看看

主机程序主程序
int main(void)
{
 CanTxMsg TxMessage;
 u32 i = 0;
 u8 TransmitMailbox;
 u8 flag=1,Txflag=0;
 
 RCC_Configuration();
 NVIC_Configuration();
 GPIO_Configuration();
 GPIO_SetBits(GPIOA, GPIO_Pin_3);
 
 do { 
     TestRx = CAN_Polling();
    } while (TestRx == 0);
 
 if(flag == 1)
 {
   TxMessage.StdId=0x11;
   TxMessage.RTR=CAN_RTR_REMOTE;
   TxMessage.IDE=CAN_ID_STD;
   TxMessage.DLC=2;
   
   TransmitMailbox=CAN_Transmit(&TxMessage);
   i = 0;
   while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF))
   {
     i++;
   }
   if(i == 0xFF) Txflag = 1;
   else Txflag = 0;
 }
 
 if(Txflag == 1) GPIO_SetBits(GPIOA, GPIO_Pin_3);
 else GPIO_ResetBits(GPIOA, GPIO_Pin_3);
 while (1) 
 {     
 }
}

从机程序主程序
int main(void)
{
  u32 i = 0;
  u8 TransmitMailbox;
  CanTxMsg TxMessage;
  
  /* System Clocks Configuration */
  RCC_Configuration();
  /* NVIC Configuration */
  NVIC_Configuration();
  
  /* GPIO ports pins Configuration */
  GPIO_Configuration();
  GPIO_SetBits(GPIOA, GPIO_Pin_3);
  do { 
     TestRx = CAN_Polling();
    } while (TestRx == 0);
  
  
  
  while (1)
  {
    if(RxMessage.RTR == CAN_RTR_REMOTE)
    {
     RxMessage.RTR = CAN_RTR_DATA;
     
     TxMessage.StdId = RxMessage.StdId;
     TxMessage.RTR = CAN_RTR_DATA;
     TxMessage.IDE = RxMessage.IDE;
     TxMessage.DLC = RxMessage.DLC;
     TxMessage.Data[0]=0xCA;
     TxMessage.Data[1]=0xFE;
     TxMessage.Data[2]=0xAA;
     TxMessage.Data[3]=0xAA;
     TxMessage.Data[4]=0xAA;
     TxMessage.Data[5]=0xAA;
     TxMessage.Data[6]=0xAA;
     TxMessage.Data[7]=0xAA;
     
     TransmitMailbox=CAN_Transmit(&TxMessage);
     i = 0;
     while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF))
     {
       i++;
     }
    }//if
  }//while
}

CAN初始化函数为
TestStatus CAN_Polling(void)
{ u8 Error;
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  /* CAN register init */
  CAN_DeInit();
  CAN_StructInit(&CAN_InitStructure);
  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM=DISABLE;
  CAN_InitStructure.CAN_ABOM=DISABLE;
  CAN_InitStructure.CAN_AWUM=DISABLE;
  CAN_InitStructure.CAN_NART=DISABLE;
  CAN_InitStructure.CAN_RFLM=DISABLE;
  CAN_InitStructure.CAN_TXFP=DISABLE;
  CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
  CAN_InitStructure.CAN_Prescaler=5;
  Error = CAN_Init(&CAN_InitStructure);
  if (Error == 0)
        return FAILED;
  /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber=0;
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);
  CAN_ITConfig(CAN_IT_FMP0, ENABLE);
  
  return PASSED;
}

相关帖子

沙发
ar_m_cu|  楼主 | 2009-5-14 08:07 | 只看该作者

急 啊  !有人知道原因吗?

使用特权

评论回复
板凳
georgekin203| | 2009-5-14 10:09 | 只看该作者

can总线要两个节点才能调试

一个节点肯定出错

使用特权

评论回复
地板
ar_m_cu|  楼主 | 2009-5-14 15:04 | 只看该作者

是俩节点啊

我用了两块一样的板子,终端电阻也加了,自测试的时候也通过了。

使用特权

评论回复
5
ar_m_cu|  楼主 | 2009-5-15 09:51 | 只看该作者

终于调试成功

经过长时间的努力,终于调试成功,原来是中断的原因!哈哈 

使用特权

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

本版积分规则

61

主题

1200

帖子

7

粉丝