OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12291|回复: 12

stm32can通信问题

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-3-9
在线时间
0 小时
发表于 2012-3-9 10:58:43 | 显示全部楼层 |阅读模式
can总线上共两节点进行通信,一个用Atmage16、SJA1000T、PCA82C250,另一个用STM32F103C8、PCA82C250,两边全部用了光耦隔离,现在的情况是这样:
1.只有这两个节点的时候不能通信。
2.当我在总线上加入一个CAN卡进行查看数据时,两个节点间可以通信80---150次,这时的情况是Atmage16一直可以发送数据,STM32可以一直接收数据,但是STM32不能发送数据了,打断点发现是没有发送邮箱了,即CAN_TranSmit一直返回CAN_NO_MB,发送间隔在500MS一次。
3.用CAN卡和M32进行通信,一直正常,STM32可接收也可以发送,数据也一直正常,发送间隔在500MS、10MS都可。
4.随后再次实验,CAN卡不启动只是挂在总线上,不能进行通信,跟没有加上CAN卡一样,Atmage不加电,只是挂在总线上,用CAN卡进行通信,正常,因此初步排除阻抗匹配问题,电路已加入120欧的 电阻做匹配。
请高手给解答一下,看看可能是哪的问题,我个人觉得是Atmega16发出的数据使得STM32出错了,从而不能发送数据了。
望高手不吝赐教,先行谢过。
正点原子,来帮忙看看这是怎么回事吧,已经折磨我3天了,整个项目都卡在这了。极其着急。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-3-9
在线时间
0 小时
 楼主| 发表于 2012-3-9 10:59:47 | 显示全部楼层
急盼高手出现,在线等了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-9 11:09:20 | 显示全部楼层
回复【2楼】dilong22:
---------------------------------
CAN卡直接和MEGA16的CAN连接(断开STM32的),能通讯么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-3-9
在线时间
0 小时
 楼主| 发表于 2012-3-9 11:13:46 | 显示全部楼层
可以的。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-3-9
在线时间
0 小时
 楼主| 发表于 2012-3-9 11:17:25 | 显示全部楼层
波特率应该也没问题,因为收的到东西都是正确的,可以发送的时候,发送的数据也是对的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-9 11:29:56 | 显示全部楼层
那你这个就比较怪了.考虑软件上的问题吧.看看是不是STM32 CAN设置和SJA1000T的设置有些什么地方没弄好.
还有一个办法,两个STM32的CAN互相通讯,测试下看看有无问题?,在两个SJA1000T测试有无问题?如果都无问题,说明确实就是你软件的问题了.
对CAN我也不是很了解,所以帮你的地方不多,呵呵.见谅.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-3-9
在线时间
0 小时
 楼主| 发表于 2012-3-9 12:08:36 | 显示全部楼层
谢谢,我再试试吧,实在不行就只能用原来的mega16了,一直用这个没出过什么大问题,今天这个问题确实难住我了。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-3-9
在线时间
0 小时
 楼主| 发表于 2012-3-10 13:57:37 | 显示全部楼层
仍然没有解决,现在只能用老办法了,采用以前的板子,用两个mega16+SJA1000,两个板子通信一点问题没有,不知道为什么和STM32的CAN就不行,求解中。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-10 18:42:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-16
在线时间
2 小时
发表于 2014-12-16 15:08:42 | 显示全部楼层
回复【9楼】正点原子:
-------------------------
搂住&原子兄,你好!
stm32107互联性产品中双can通信,主can1和从can2,通过收发器连成一个局域网,在一个CPU前提下,
主can1和从can2同时工作.如果把滤波器设置成0即不使用屏蔽接受全标识符,can1和can2可以进入中断收发,但是打开滤波器后,两个can都不进中断,同样只设置屏蔽位为0想问哈是不是器件不支持?但是,不使用滤波器就可以进中断.代码设置如下
    NVIC_InitTypeDef       NVIC_InitStructure;
    CAN_InitTypeDef        CAN_InitStructure;
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    GPIO_InitTypeDef       GPIO_InitStructure;
    /* CAN register init */
    CAN_DeInit(CAN2);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
    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 = ENABLE;
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
    CAN_InitStructure.CAN_Prescaler = 8;
    CAN_Init(CAN2, &CAN_InitStructure);
    /* CAN filter init */
    CAN_FilterInitStructure.CAN_FilterNumber = 14;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; 
//(((CAN1_RcvID<<3)&0xFFFF0000)>>16);
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;      //(((CAN1_RcvID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; //0xFFFF;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; //0xFFFF;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
    /* Configure CAN pin: RX */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    /* Configure CAN pin: TX */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_PinRemapConfig(GPIO_Remap_CAN2, ENABLE);
    CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
    NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
can1设置类似.如果知道
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-16 23:28:39 | 显示全部楼层
回复【10楼】yc_xpg:
---------------------------------
这我也不太清楚哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-16
在线时间
2 小时
发表于 2014-12-17 15:46:30 | 显示全部楼层
回复【11楼】正点原子@楼主:
---------------------------------
恩,谢谢回复,问题我解决了,主要是
 CAN_FilterInitStructure.CAN_FilterIdHigh =  (((CAN1_RcvID<<3)&0xFFFF0000)>>16);
 CAN_FilterInitStructure.CAN_FilterIdLow =(((CAN1_RcvID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF); 
看到如此多人这样配置,于是不加思索这样配置,回头仔细看资料,
改为 32位模式这样配置就好了
CAN_FilterInitStructure.CAN_FilterIdHigh = CAN1_RcvID << 5;
CAN_FilterInitStructure.CAN_FilterIdLow =(0| CAN_ID_STD|CAN_RTR_DATA);
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-12-17 22:52:32 | 显示全部楼层
回复【12楼】yc_xpg:
---------------------------------
谢谢分享。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 19:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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