打印

can 由环回改为正常模式后。。。

[复制链接]
3860|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sure_2011|  楼主 | 2010-1-10 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是官方提供的exam,设置为还回模式时,能够正常运行,用zlg的USBCAN-II在can端可以接受数据,改为Normal模式后,就收不到数据了。
翻了很多帖子,貌似常见问题有两个:1、stm32的can信号转发器的供电要5V;2、要有两个有效节点。我的应该都满足了啊,用外部5V供电;USBCAN-II和stm32两个节点。刚接触can,还请多多指点!谢谢。
沙发
sure_2011|  楼主 | 2010-1-11 09:49 | 只看该作者
在stm32端有一个转换成差分信号的小板,上面有120欧的电阻。还有哪里会有问题呢???

使用特权

评论回复
板凳
sure_2011|  楼主 | 2010-1-21 16:59 | 只看该作者
高手们,帮我分析一下啊!
int main(void)
{
  CanRxMsg RxMessage;

  /* System Clocks Configuration */
  RCC_Configuration();
  /* NVIC Configuration */
  NVIC_Configuration();
  LED_Configuration();
  CAN_Configuration();
  
  while(1)
  {
    if (CAN_Polling() == FAILED)
        leddisplay(LEDTWO, LEDON);
    else
        leddisplay(LEDTHREE, LEDON);
   
    if (CAN_MessagePending(CAN_FIFO0))
    {
        /* receive */
        RxMessage.StdId   = 0x00;
        RxMessage.IDE     = CAN_ID_STD;
        RxMessage.DLC     = 0x00;
        RxMessage.Data[0] = 0x00;
        RxMessage.Data[1] = 0x00;
        CAN_Receive(CAN_FIFO0, &RxMessage);
    }   
  }
}
TestStatus CAN_Polling ( void )
{
    CanTxMsg TxMessage;
    u32 retry = TIMEOUT;
    u8  TransmitMailbox;

    leddisplay(LEDONE, LEDOFF);
    leddisplay(LEDTWO, LEDOFF);
    leddisplay(LEDTHREE, LEDOFF);
  
    while (CAN_Reset() && retry --) ;
    if (!retry)
        return FAILED;

    TxMessage.StdId   = 0x12;
    TxMessage.RTR     = CAN_RTR_DATA;
    TxMessage.IDE     = CAN_ID_STD;
    TxMessage.DLC     = 0x02;
    TxMessage.Data[0] = 0x55;
    TxMessage.Data[1] = 0xAA;

    retry = TIMEOUT;
    TransmitMailbox = CAN_Transmit(&TxMessage);  // 执行一次,在USB-CAN接收端收到100多帧。
    while ((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && retry --) ; //状态一直是CANTXPENDING
    if (!retry)
        return FAILED;
  
    return PASSED;
}

u8  CAN_Reset ( void )
{
    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_Mode_LoopBack;//;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 = 0x05;       // 50 kbps
    if (CAN_Init(&CAN_InitStructure) == 0x00)
    {
        leddisplay(LEDONE, LEDON);
        return 0xff;
    }
  
    // CAN filter init
    CAN_FilterInitStructure.CAN_FilterNumber         = 0x00;
    CAN_FilterInitStructure.CAN_FilterMode           = CAN_FilterMode_IdMask;
    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;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0x00;
    CAN_FilterInitStructure.CAN_FilterActivation     = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
  
    return 0x00;
}

使用特权

评论回复
地板
IJK| | 2010-1-21 17:22 | 只看该作者
查查看(寄存器CAN_MSR),CAN处于什么状态,如果处于init状态就不对

使用特权

评论回复
5
sinadz| | 2010-1-21 18:36 | 只看该作者
用示波器看下,看有没发数据

使用特权

评论回复
6
sure_2011|  楼主 | 2010-1-21 19:28 | 只看该作者
谢谢楼上的回答。
在正常模式下,STM32板子发,ZLG的USB-CAN能收到数据。但下面两句的地方有问题。
TransmitMailbox = CAN_Transmit(&TxMessage);  // 执行一次,在USB-CAN接收端收到100多帧。
    while ((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && retry --) ; //状态一直是CANTXPENDING

使用特权

评论回复
7
司徒老鹰| | 2010-1-21 22:51 | 只看该作者
这么长码……:L

使用特权

评论回复
8
sure_2011|  楼主 | 2010-1-22 11:36 | 只看该作者
就是一些配置和初始化,也没有什么特别的。可就是不能正常通信,发还好一点,收一点都不行。

使用特权

评论回复
9
sure_2011|  楼主 | 2010-1-22 15:11 | 只看该作者
感谢 luckyfzl。
他的代码对于用USBCAN-II和板子通信是好的。

使用特权

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

本版积分规则

2

主题

11

帖子

0

粉丝