硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4152|回复: 19
收起左侧

[有问必答] can通讯问题

[复制链接]

4

主题

22

回帖

34

积分

新手上路

积分
34
发表于 2018-8-13 09:13:15 | 显示全部楼层 |阅读模式
我参考V5板用TJA1050做一块CAN通讯电路板,现在用CAN_Mode_LoopBack模式自检收发都没有问题,但CAN_Mode_Normal模式下,数据发送不出去,也接收不到数据。TJA1050电路部分我用V5检测了没有问题;TX,RX二个引脚我检查了也没有问题。程序用的就是V5板的CAN1和CAN2通讯程序例子。现在不知问题出在哪,手上只有万用表,各位大侠指导我一下。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2018-8-13 10:23:02 | 显示全部楼层
引脚没问题,那就是波特率率了。如果波特率也没有问题,那就是硬件还是有点问题。

你现在是如何测试的。
回复

使用道具 举报

2

主题

58

回帖

64

积分

初级会员

积分
64
发表于 2018-8-13 10:23:10 | 显示全部楼层
应该是你两个CAN的ID是不是设置为一样的了?改一下就好了。
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-13 11:26:45 | 显示全部楼层
谢谢,上面二位大侠回答!我先直接用V5板测试“V5-133c_CAN1和CAN2网络通信”例子,V5板通讯是正常的。然后我直接用“V5-133c_CAN1和CAN2网络通信”例子下到我做板子上与V5板进行通讯,不管是V5发送出的,还是我做板子发送,双方都收不到!刚开始我怀疑是电平转换TJA1050有问题,我直接从V5板上接CAN2信号到我做板子通过TJA1050输出,V5板也能收到数据,证时电平转换电路没有问题。问题只可能出设置上,但我用的同一程序
程序(V5-133c_CAN1和CAN2网络通信),为什么V5板能通讯,我做的板子不能通讯。我怀疑过主晶体,但我串口讯正常,应该也没有多少问题。真不知问题出在哪!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2018-8-13 14:11:33 | 显示全部楼层
louwenyan 发表于 2018-8-13 11:26
谢谢,上面二位大侠回答!我先直接用V5板测试“V5-133c_CAN1和CAN2网络通信”例子,V5板通讯是正常的。然后 ...

考虑把CAN不相关的程序注释掉看看。
回复

使用道具 举报

2

主题

58

回帖

64

积分

初级会员

积分
64
发表于 2018-8-13 21:08:08 | 显示全部楼层
louwenyan 发表于 2018-8-13 11:26
谢谢,上面二位大侠回答!我先直接用V5板测试“V5-133c_CAN1和CAN2网络通信”例子,V5板通讯是正常的。然后 ...

1.首先你板子和V5电路确认一致
2.你下载在不同板子里需要板子之间CAN通信正常的话,CAN ID 的配置确认是否要不同
3.只有万用表比较麻烦,如果硬件没有问题那就软件问题,总之应该是有问题的,带着有问题的态度去查找问题,这样才能耐心查找到问题。
4.可以的话程序放上来,原理图放上来。
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-14 09:04:18 | 显示全部楼层
365mcu 发表于 2018-8-13 21:08
1.首先你板子和V5电路确认一致
2.你下载在不同板子里需要板子之间CAN通信正常的话,CAN ID 的配置确认是 ...

电路图我只按实际应用加了光藕,我现在担心光藕问题用跳线短接了如下图f:\louwenyan\pic\1.jpg
CAN1_TX 接407的PH13 ,CAN1_RX接407的PI9   
程序如下:
void can_demo(void)
{       
        uint8_t ucKeyCode;                   /* °´¼ü´úÂë */
       
        can1_Init();                        /* ³õʼ»¯STM32 CAN1Ó²¼þ */
        can1_NVIC_Config();                /* ÅäÖÃCAN1ÖÐ¶Ï */
       
        //can2_Init();                        /* ³õʼ»¯STM32 CAN2Ó²¼þ */
        //can2_NVIC_Config();                /* ÅäÖÃCAN2ÖÐ¶Ï */       
        SendCan1Msg();
        while(1)
        {
                stat=CAN_TransmitStatus(CAN1,Mailbox1);
                if(stat==1)
                {
                        SendCan1Msg();
                }
        }
}

static void SendCan1Msg(void)
{
    g_tCanTxMsg.Data[0] = g_ucLedNo;
    Mailbox1=CAN_Transmit(CAN1, &g_tCanTxMsg);       
}

#define CAN1_CLK                    RCC_APB1Periph_CAN1
#define CAN1_RX_PIN                 GPIO_Pin_9
#define CAN1_TX_PIN                 GPIO_Pin_13
#define CAN1_GPIO_TX_PORT           GPIOH
#define CAN1_GPIO_TX_CLK            RCC_AHB1Periph_GPIOH
#define CAN1_GPIO_RX_PORT           GPIOI
#define CAN1_GPIO_RX_CLK            RCC_AHB1Periph_GPIOI
#define CAN1_AF_PORT                GPIO_AF_CAN1
#define CAN1_RX_SOURCE              GPIO_PinSource9
#define CAN1_TX_SOURCE              GPIO_PinSource13

static void can1_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        CAN_InitTypeDef        CAN_InitStructure;
        CAN_FilterInitTypeDef  CAN_FilterInitStructure;

        RCC_AHB1PeriphClockCmd(CAN1_GPIO_TX_CLK|CAN1_GPIO_RX_CLK, ENABLE);

       
        GPIO_PinAFConfig(CAN1_GPIO_RX_PORT, CAN1_RX_SOURCE, CAN1_AF_PORT);
        GPIO_PinAFConfig(CAN1_GPIO_TX_PORT, CAN1_TX_SOURCE, CAN1_AF_PORT);

        GPIO_InitStructure.GPIO_Pin = CAN1_RX_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(CAN1_GPIO_RX_PORT, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = CAN1_TX_PIN;
        GPIO_Init(CAN1_GPIO_TX_PORT, &GPIO_InitStructure);

       
        RCC_APB1PeriphClockCmd(CAN1_CLK, ENABLE);
       
        CAN_DeInit(CAN1);
       
       
        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_7tq;
        CAN_InitStructure.CAN_BS2 = CAN_BS2_6tq;
        CAN_InitStructure.CAN_Prescaler = 6;
        CAN_Init(CAN1, &CAN_InitStructure);
       
       
        CAN_FilterInitStructure.CAN_FilterNumber = 0;               
        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 = CAN_FIFO0;               
        CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;                               
        CAN_FilterInit(&CAN_FilterInitStructure);

       
        g_tCanTxMsg.StdId = 0x321;
        g_tCanTxMsg.ExtId = 0x01;
        g_tCanTxMsg.RTR = CAN_RTR_DATA;
        g_tCanTxMsg.IDE = CAN_ID_STD;
        g_tCanTxMsg.DLC = 1;
}   
程序基本就V5板的CAN例子改了一下

回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-14 09:10:07 | 显示全部楼层
图片传不上来
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-14 09:21:19 来自手机 | 显示全部楼层
我用手机拍一张
1534209618015..jpg
回复

使用道具 举报

2

主题

58

回帖

64

积分

初级会员

积分
64
发表于 2018-8-14 11:30:28 | 显示全部楼层
louwenyan 发表于 2018-8-14 09:04
电路图我只按实际应用加了光藕,我现在担心光藕问题用跳线短接了如下图
CAN1_TX 接407的PH13 ,CAN1_RX接 ...

   CAN_InitStructure.CAN_ABOM = DISABLE;     改成ENABLE(这个disable的话,只要总线插拔一次就通不上了);
CAN_InitStructure.CAN_TXFP = DISABLE; 改成ENABLE
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-14 14:01:52 来自手机 | 显示全部楼层
365mcu 发表于 2018-8-14 11:30
CAN_InitStructure.CAN_ABOM = DISABLE;     改成ENABLE(这个disable的话,只要总线插拔一次就通不上 ...

我改了还是一样
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-14 14:04:26 来自手机 | 显示全部楼层
.刚用逻辑方析仪看了一下Tx输出的波形,如下
1534226642686..jpg
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-14 14:11:29 来自手机 | 显示全部楼层
v5板Tx输出波形如下
1534227007993..jpg
1534227071755..jpg
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
发表于 2018-8-14 14:12:58 | 显示全部楼层
波特率不对
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-14 14:28:00 | 显示全部楼层
本帖最后由 louwenyan 于 2018-8-14 14:30 编辑

我用的是同一个程序,只是板子不同,一块是V5板,一块是我自己做的。主晶震都是25MHZ,为什么会波特率不同?
回复

使用道具 举报

2

主题

58

回帖

64

积分

初级会员

积分
64
发表于 2018-8-14 15:12:06 | 显示全部楼层
louwenyan 发表于 2018-8-14 14:28
我用的是同一个程序,只是板子不同,一块是V5板,一块是我自己做的。主晶震都是25MHZ,为什么会波特率不同?

同一个程序的话,不同板子上的ID要改,接收的时候判断要对
g_tCanTxMsg.StdId = 0x321;//不同板子不同id
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-15 11:04:25 | 显示全部楼层
问题找到了,是主晶振没有起振,可能是电容焊错了,现在可以正常接收到V5板发送来的数据,但发送数据发送不出去,一直返回正在发送
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-15 16:05:15 来自手机 | 显示全部楼层
发送引脚波形不知为什么只有前面的
1534320259000..jpg
1534320295557..jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107098
QQ
发表于 2018-8-16 01:22:42 | 显示全部楼层
louwenyan 发表于 2018-8-15 16:05
发送引脚波形不知为什么只有前面的

换个CAN的PHY芯片看看,如果你的PHY没有做隔离,调试过程中很容易损坏,我遇到过几次。
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2018-8-16 08:49:32 | 显示全部楼层
我试试看,谢谢您这么晚还回复我的贴子
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 09:52 , Processed in 0.358314 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表