硬汉嵌入式论坛

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

[有问必答] can1和can2通信问题小汇总

[复制链接]

2

主题

4

回帖

2

积分

新手上路

积分
2
发表于 2017-2-24 14:30:51 | 显示全部楼层 |阅读模式
问题1:把CAN1和CAN2之间的通信例程下载到V5板子上,LD1亮其他灭,按键1和按键2其他灯没有任何其他反应,仅仅维持LD1亮。串口打印输出logo信息正常。测试发现没有进入接收中断函数。接线方式为:CANH2---------CANH1、 CANL2--------CANL1、  J13跳线TX接PB13,J12跳线RX接PB5(按照例程要求)。
问题:此种现象是什么问题?如何解决?
问题2:测试can1和can2的单独网络通信例程,发现也没进入接收中断,但能够完成例程中的按键灯依次亮的正常现象。
问题:如果没进接收中断,还能完成,是否说明此历程不是can的通信。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107100
QQ
发表于 2017-2-24 18:00:51 | 显示全部楼层
1.  如果无法使用,你板子上面的CAN PHY芯片极有可能已经损坏。开发板上面的CAN PHY是没有做隔离的。不当的操作很容易损坏。
2.  单独的例子需要至少两块V5板子手拉手连接进行测试,测试的时候,已经设置了发送端也做LED切换。你要观察的是接收端的那些板子的LED变化。
回复

使用道具 举报

2

主题

4

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2017-2-27 09:03:37 | 显示全部楼层
通过使用两个V5板,拉手连接,测试发现can1和can2的例程可用,谢谢解答。[s:151][s:151][s:151]
请问是否说明can的CAN PHY芯片没有损坏?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107100
QQ
发表于 2017-2-27 09:18:44 | 显示全部楼层

回 胡小冬 的帖子

胡小冬:通过使用两个V5板,拉手连接,测试发现can1和can2的例程可用,谢谢解答。[s:151][s:151][s:151]
请问是否说明can的CAN PHY芯片没有损坏? (2017-02-27 09:03) 
两个板子独立测试CAN1和CAN2都没问题问题的话,说明是没有损坏的,再单独测试下板载CAN1和CAN2两个。
回复

使用道具 举报

2

主题

4

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2017-2-28 14:56:55 | 显示全部楼层

回 eric2013 的帖子

eric2013:两个板子独立测试CAN1和CAN2都没问题问题的话,说明是没有损坏的,再单独测试下板载CAN1和CAN2两个。 (2017-02-27 09:18)
想把历程改成发送一个数组,写了这样一个发送函数,麻烦您指导下有什么问题吗?为什么发送不出去?谢谢啊!
static void SendCan1Msg(void)
{        
        u8 mbox;
        u16 i,j,cnt=0;
        u8 canbuf[6];
        CanTxMsg TxMessage;
        //TxMessage.DLC=len;
        for(i=0;i<6;i++)
        {
        canbuf=cnt+i;        }
        bsp_DelayMS(50);
        for(i=0;i<6;i++)
        {
            TxMessage.Data=canbuf;                              }
        CAN_Transmit(CAN1, &TxMessage);
        for(j=0;j<6;j++)
            {
                printf("发送的数据为%d\\r\\n",TxMessage.Data[j]);
            }
}
回复

使用道具 举报

2

主题

4

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2017-2-28 15:05:58 | 显示全部楼层

回 eric2013 的帖子

eric2013:

两个板子独立测试CAN1和CAN2都没问题问题的话,说明是没有损坏的,再单独测试下板载CAN1和CAN2两个。
这是中断中的接收函数,进入中断了,但没接收到,用USBcan-II+调试,发现没发出来,没看出来程序哪里有问题,求帮忙看看,谢谢啦!!

void can2_ISR(void)
{
        u32 i,j;
        u8 buf[6];
        CAN_Receive(CAN2, CAN_FIFO1, &g_tCanRxMsg);
        if ((g_tCanRxMsg.StdId == 0x321) && (g_tCanRxMsg.IDE == CAN_ID_STD) && (g_tCanRxMsg.DLC == 1))
        {        
                        for(i=0;i<6;i++)
                        {
                                buf=g_tCanRxMsg.Data;                        }
                        for(j=0;j<6;j++)
                                {
                                        printf("1接受的数据为º%d\\r\\n",buf[j]);                                }
             }
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107100
QQ
发表于 2017-3-1 07:56:55 | 显示全部楼层

回 胡小冬 的帖子

胡小冬:这是中断中的接收函数,进入中断了,但没接收到,用USBcan-II+调试,发现没发出来,没看出来程序哪里有问题,求帮忙看看,谢谢啦!!

void can2_ISR(void)
{
....... (2017-02-28 15:05) 
保证USBcan-II跟板子的CAN波特率一致,极有可能是波特率不一致导致的。
回复

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2018-2-3 17:42:45 | 显示全部楼层
eric2013 发表于 2017-2-24 18:00
1.  如果无法使用,你板子上面的CAN PHY芯片极有可能已经损坏。开发板上面的CAN PHY是没有做隔离的。不当的 ...

最近我在做用安富莱的程序用在我自己的板子上,发现CAN通讯部分一直发不了数据;
1)我用原子的例程修改IO口(与我自己的板子对应)后,能正常发送数据,用usb_can接收工具在电脑上可正常接收;这说明我硬件是好的;
2)我用安富莱的程序,改过相应IO配置后,数据发送不出来;
3)我用安富莱的can配转程序 主要是can_Init,can_NVIC_Config,SendCanMsg移到原子的工程下,并把原子的can配置注释,可以正常通讯;这说明安富莱的can配置也是没问题的。
4)我用原子的can配置移到安富莱下,发现还是通讯不了。
那我想在想不明白,安富莱的can配置程序没有问题,但为什么在安富莱的工程下发不出数据呢,到底是那的问题?找了几天,没找到原因
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107100
QQ
发表于 2018-2-3 17:54:02 | 显示全部楼层
雷轩修 发表于 2018-2-3 17:42
最近我在做用安富莱的程序用在我自己的板子上,发现CAN通讯部分一直发不了数据;
1)我用原子的例程修改IO ...

使用我们的那个CAN ,注意CAN波特率的计算,早期搞的那个裸机例子注释有问题。我们自己的板子之间通信是没问题的,移植到其它板子注意波特率。另外就是用CAN2的话,务必打开CAN1的时钟。

别的没有要注意的了,随意操作。
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2018-2-5 08:37:18 | 显示全部楼层
eric2013 发表于 2018-2-3 17:54
使用我们的那个CAN ,注意CAN波特率的计算,早期搞的那个裸机例子注释有问题。我们自己的板子之间通信是 ...

        /*
                CAN 波特率 = RCC_APB1Periph_CAN1 / Prescaler / (SJW + BS1 + BS2);
               
                SJW = synchronisation_jump_width
                BS = bit_segment
               
                本例中,设置CAN波特率为500Kbps               
                CAN 波特率 = 420000000 / 2 / (1 + 12 + 8) / = 1 MBps               
        */
        CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
        CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;
        CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
        CAN_InitStructure.CAN_Prescaler = 4;

这段代码是不是配置为500K,我放在原子的工程中就可以正常收发,在你们的工程中,其它都没问题,就是发不出消息  can调试器收不到
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2018-2-5 09:21:07 | 显示全部楼层
eric2013 发表于 2018-2-3 17:54
使用我们的那个CAN ,注意CAN波特率的计算,早期搞的那个裸机例子注释有问题。我们自己的板子之间通信是 ...

搞定了  是我总线时钟没有设置好
换另外的板子需要相应修改下面两个参数   这样can总线时间才为42MHZ
  *-----------------------------------------------------------------------------
  *        HSE Frequency(Hz)                      | 25000000  8000000
  *-----------------------------------------------------------------------------
  *        PLL_M                                  | 25        8
  *-----------------------------------------------------------------------------
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107100
QQ
发表于 2018-2-6 01:38:36 | 显示全部楼层
雷轩修_uH44D 发表于 2018-2-5 09:21
搞定了  是我总线时钟没有设置好
换另外的板子需要相应修改下面两个参数   这样can总线时间才为42MHZ
  ...

好的,解决了就好
回复

使用道具 举报

1

主题

70

回帖

73

积分

初级会员

积分
73
发表于 2018-5-30 07:03:36 | 显示全部楼层
雷轩修_uH44D 发表于 2018-2-5 09:21
搞定了  是我总线时钟没有设置好
换另外的板子需要相应修改下面两个参数   这样can总线时间才为42MHZ
  ...

你好,我情况可能和你当时有点类似
我的应用是标准帧 100k波特率
基于原子F407的一样硬件配置 板子基于“2,标准例程-库函数版本--实验27 CAN通信实验”例程 用DX-PRO逻辑分析仪怎么都没有数据

但用安富莱V5开发板  V5-133a_CAN1网络通信(V1.3) 这例程 用DX-PRO逻辑分析仪能读到标准帧数据
然后把这个例程的static void can_Init(void)\static void can_NVIC_Config(void)\static void SendCanMsg(void)移植到原子的例程,其中CAN用的IO不一样就把IO配置改下 基于原子的 用DX-PRO逻辑分析仪怎么都没有数据

也看了时钟 原子是8M system_stm32f4xx.c stm32f4xx.h文件里M都是8
V5开发板是25M system_stm32f4xx.c stm32f4xx.h文件里M都是25
也没发现什么问题? 已经困恼快2周了
请问还有什么因素没有考虑到? 能否给点思路? 谢谢
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2018-6-2 23:18:39 | 显示全部楼层
需要把can外设总线时钟也设置对  
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 11:35 , Processed in 0.411102 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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