打印

stm32环回收发成功,改成正常模式调不通?

[复制链接]
2129|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
相信哥咯|  楼主 | 2011-7-21 10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
信号一直发送不出去~~
不可能是波特率的问题,板子一样的,软件配置一样,有一个焊有120电阻。
环回模式总线上电平也没有变化~~
是不是还要设置什么的?
沙发
相信哥咯|  楼主 | 2011-7-21 10:31 | 只看该作者
#include"stm32f10x_lib.h"

void CAN_configure(void)
{

        CAN_InitTypeDef CAN_InitStructure;
        CAN_FilterInitTypeDef CAN_FilterInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);

    /* CAN1 Periph clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);
       
        /*can register int*/
        CAN_DeInit();


        /*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_LoopBack;
  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=18;
  CAN_Init(&CAN_InitStructure);

    /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber=0;
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh=((u32)0x0020<<21)>>16;//标识符
  CAN_FilterInitStructure.CAN_FilterIdLow=(((u32)0x0020<<21)|CAN_ID_STD|CAN_RTR_DATA);//&0xFFFF;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);


     /* Configure CAN pin: RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   /* CAN Periph clock enable */

}

void can_send(unsigned char data)
{
          
        CanTxMsg TxMessage;
        u8 TransmitMailbox = 0;                      
        TxMessage.StdId=0x0020;//标识符
          TxMessage.RTR=CAN_RTR_DATA;
        TxMessage.IDE=CAN_ID_STD;
          TxMessage.DLC=2;
          TxMessage.Data[0]=data;
          TxMessage.Data[1]=0xFE;

          TransmitMailbox=CAN_Transmit(&TxMessage);
   while(CAN_TransmitStatus(TransmitMailbox) != CANTXOK){}//等待发送
       
}

unsigned char can_rev(void)
{
         CanRxMsg RxMessage;

  //        RxMessage.StdId=0x00;//不需要设置
          RxMessage.IDE=CAN_ID_STD;
          RxMessage.DLC=2;
          RxMessage.Data[0]=0x00;
          RxMessage.Data[1]=0x00;
          while (CAN_MessagePending(CAN_FIFO0)==0);//等到接收
   
           CAN_Receive(CAN_FIFO0, &RxMessage);
        CAN_FIFORelease(CAN_FIFO0);
       
  return    RxMessage.Data[0];
}



-------------------------------------

main()
   {
         unsigned int a;
         RCC_Configuration();
                       /*初始化 GPIOC时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
   USART_Configuration();
   CAN_configure();
   LedInit();
          
   while(1)
   {
                   GPIO_SetBits(GPIOB,GPIO_Pin_7);
                Delay(10);
                GPIO_ResetBits(GPIOB,GPIO_Pin_7);
                Delay(10);
                can_send(0x54);
                a=can_rev();
                USART1_Putc(a);
               
   }


   }

使用特权

评论回复
板凳
Itachi80| | 2011-7-21 13:01 | 只看该作者
软件配置不能一样,ID一样的话就不停仲裁失败了

使用特权

评论回复
地板
相信哥咯|  楼主 | 2011-7-21 18:05 | 只看该作者
3# Itachi80

你说的也是一个问题,不过我按照一个循环发送,一个循环接收也不行。。。

发送成功才会进行下次发送,一直不发送成功。

使用特权

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

本版积分规则

4

主题

927

帖子

1

粉丝