打印

STM32F103的CAN发送数据CAN分析仪接收不到数据

[复制链接]
1562|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我现在在调试STM32F103的CAN总线,就是用STM32F103通过CAN发送数据,利用CAN总线分析仪在电脑上看到数据,现在收不到数据。我把我的电路和代码以及波形放上来请广大网友指点一二,谢谢啦~~~~


下面是主函数,很简单就是初始化之后循环发送数据。

int main(void)
{
        CAN_Config();  
        LED_GPIO_Config();
         CAN_SetMsg();

        while(1)
        {
                CAN_Transmit(CAN1, &TxMessage);
                 GPIO_WriteBit(GPIOD, GPIO_Pin_2,
                             (BitAction)((1-GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_2))));
                Delay_ms(50);
        }
}
下面是CAN的配置程序:
static void CAN_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

        GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
        /* Configure CAN pin: RX */                                                                                       // PB8
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                   
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
    /* Configure CAN pin: TX */                                                                                       // PB9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                        
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
}

static void CAN_NVIC_Config(void)
{
           NVIC_InitTypeDef NVIC_InitStructure;
                /* Configure one bit for preemption priority */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;         
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                  
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                          
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

波特率为36MHz/(2+5+5)/24=125K
static void CAN_Mode_Config(void)
{
           CAN_InitTypeDef        CAN_InitStructure;

        CAN_DeInit(CAN1);
        CAN_StructInit(&CAN_InitStructure);

        CAN_InitStructure.CAN_TTCM=DISABLE;                          
        CAN_InitStructure.CAN_ABOM=ENABLE;                          
        CAN_InitStructure.CAN_AWUM=ENABLE;                       
        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_2tq;                  
        CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;                  
        CAN_InitStructure.CAN_BS2=CAN_BS2_5tq;                  
        CAN_InitStructure.CAN_Prescaler =24;                  
        CAN_Init(CAN1, &CAN_InitStructure);
}


static void CAN_Filter_Config(void)
{
        CAN_FilterInitTypeDef  CAN_FilterInitStructure;

         CAN_FilterInitStructure.CAN_FilterNumber=0;                                               
         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
         CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;

        CAN_FilterInitStructure.CAN_FilterIdHigh= (((u32)0x1314<<3)&0xFFFF0000)>>16;                       
        CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;                       
        CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFF;                       
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                               
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                       
        CAN_FilterInit(&CAN_FilterInitStructure);
        CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}

CAN通信报文的内容设置:
void CAN_SetMsg(void)
{          
  //TxMessage.StdId=0x00;                                                 
  TxMessage.ExtId=0x1314;                                       
  TxMessage.IDE=CAN_ID_EXT;                                       
  TxMessage.RTR=CAN_RTR_DATA;                               
  TxMessage.DLC=2;                                                       
  TxMessage.Data[0]=0xAB;
  TxMessage.Data[1]=0xCD;
}





电路连接方式.jpg (165.8 KB )

电路连接图,CAN总线分析仪的120欧姆电阻是我手动加上去的

电路连接图,CAN总线分析仪的120欧姆电阻是我手动加上去的

发送引脚上的波形图.jpg (389.33 KB )

这是加上CAN收发器等后级电路之后的波形,而且接收引脚上也出现一样的波形 ...

这是加上CAN收发器等后级电路之后的波形,而且接收引脚上也出现一样的波形 ...

断掉后级电路之后的波形图.jpg (432.74 KB )

这个事断掉后级电路只剩STM32之后测量的发送引脚波形图

这个事断掉后级电路只剩STM32之后测量的发送引脚波形图

CAN总线分析仪的设置.png (246.44 KB )

这是CAN总线分析仪的设置情况

这是CAN总线分析仪的设置情况

使用特权

评论回复

相关帖子

沙发
zzzhangliyuan|  楼主 | 2019-7-17 16:02 | 只看该作者
问题找到了,是我没有把CAN总线分析仪的速率配置好,我误把串口波特率当成了CAN的波特率了

使用特权

评论回复
板凳
cainiao518| | 2019-7-18 09:03 | 只看该作者
zzzhangliyuan 发表于 2019-7-17 16:02
问题找到了,是我没有把CAN总线分析仪的速率配置好,我误把串口波特率当成了CAN的波特率了
...

双方速率一致才能正常通信

使用特权

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

本版积分规则

45

主题

153

帖子

6

粉丝