5062|14

106

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于f407和f103can通信不上的问题? [复制链接]

 
5芯积分
本帖最后由 刘W杰 于 2017-2-10 14:56 编辑

有人用过f407和f103can通信么? 为什么波特率一样,掩码那些都相同就是没反应。用逻辑分析仪接H,L,2条线的波形是这样的。
file:///


F407配置程序
CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,CAN_Mode_Normal);//CAN,波特率500Kbps    42/(7+6+1)/6=0.5M

        CAN_InitStructure.CAN_TTCM=DISABLE;        //非时间触发通信模式   
          CAN_InitStructure.CAN_ABOM=DISABLE;        //软件自动离线管理         
          CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)
          CAN_InitStructure.CAN_NART=DISABLE;        //禁止报文自动传送
          CAN_InitStructure.CAN_RFLM=DISABLE;        //报文不锁定,新的覆盖旧的  
          CAN_InitStructure.CAN_TXFP=DISABLE;        //优先级由报文标识符决定
          CAN_InitStructure.CAN_Mode= mode;         //模式设置
          CAN_InitStructure.CAN_SJW=tsjw;        //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq
          CAN_InitStructure.CAN_BS1=tbs1; //Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq
          CAN_InitStructure.CAN_BS2=tbs2;//Tbs2范围CAN_BS2_1tq ~        CAN_BS2_8tq
          CAN_InitStructure.CAN_Prescaler=brp;  //分频系数(Fdiv)为brp+1        
          CAN_Init(CAN1, &CAN_InitStructure);   // 初始化CAN1

                //配置过滤器
         CAN_FilterInitStructure.CAN_FilterNumber=0;          //过滤器0
          CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
          CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32位ID
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
           CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0
          CAN_FilterInit(&CAN_FilterInitStructure);//滤波器初始化
(把掩码已经全部改为0来测试了)


f103vet6的配置程序

static void CAN_Mode_Config(void)
{
           CAN_InitTypeDef        CAN_InitStructure;
                 /************************CAN通信参数设置**********************************/
        /*CAN寄存器初始化*/
        CAN_DeInit(CAN1);
        CAN_StructInit(&CAN_InitStructure);
        /*CAN单元初始化*/
        CAN_InitStructure.CAN_TTCM=DISABLE;                           //MCR-TTCM  时间触发通信模式使能
    CAN_InitStructure.CAN_ABOM=DISABLE;                           //MCR-ABOM  自动离线管理
    CAN_InitStructure.CAN_AWUM=ENABLE;                           //MCR-AWUM  自动唤醒模式
    CAN_InitStructure.CAN_NART=DISABLE;                           //MCR-NART  禁止报文自动重传          DISABLE-自动重传
    CAN_InitStructure.CAN_RFLM=DISABLE;                           //MCR-RFLM  接收FIFO 锁定模式  DISABLE-溢出时新报文会覆盖原有报文  
    CAN_InitStructure.CAN_TXFP=DISABLE;                           //MCR-TXFP  发送FIFO优先级 DISABLE-优先级取决于报文标示符
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;  //正常发送模式
     CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;                   //BTR-SJW 重新同步跳跃宽度 1个时间单元
    CAN_InitStructure.CAN_BS1=CAN_BS1_9tq;                   //BTR-TS1 时间段1 占用了9个时间单元
    CAN_InitStructure.CAN_BS2=CAN_BS2_8tq;                   //BTR-TS1 时间段2 占8个时间单元
    CAN_InitStructure.CAN_Prescaler =4;                   ////BTR-BRP 波特率分频器  定义了时间单元的时间长度 36/(1+9+8)/4=0.5Mbps
        CAN_Init(CAN1, &CAN_InitStructure);
}

/*
* 函数名:CAN_Filter_Config
* 描述  :CAN的过滤器 配置
* 输入  :无
* 输出  : 无
* 调用  :内部调用
*/
static void CAN_Filter_Config(void)
{
   CAN_FilterInitTypeDef  CAN_FilterInitStructure;

        /*CAN过滤器初始化*/
        CAN_FilterInitStructure.CAN_FilterNumber=0;                                                //过滤器组0
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;        //工作在标识符屏蔽位模式
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;        //过滤器位宽为单个32位。
        /* 使能报文标示符过滤器按照标示符的内容进行比对过滤,扩展ID不是如下的就抛弃掉,是的话,会存入FIFO0。 */

    CAN_FilterInitStructure.CAN_FilterIdHigh= 0x0;                                //要过滤的ID高位
    CAN_FilterInitStructure.CAN_FilterIdLow= 0x0; //要过滤的ID低位
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0x0;                        //过滤器高16位每位必须匹配
    CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0x0;                        //过滤器低16位每位必须匹配
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                                //过滤器被关联到FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                        //使能过滤器
        CAN_FilterInit(&CAN_FilterInitStructure);
        /*CAN通信中断使能*/
        CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}



现在就是通信不上,一点显示都没有



        


此帖出自stm32/stm8论坛

最新回复

您好,能解释一下波特率的问题么,上面贴的两段程序的波特率都是0.5M吧?  详情 回复 发表于 2017-12-27 20:11
点赞 关注
 

回复
举报

106

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
2块can的芯片都是 A1050  ,回环测试都可以。
此帖出自stm32/stm8论坛
 
 

回复

1万

帖子

141

TA的资源

版主

板凳
 
给出具体电路,先排除硬件问题。这个也可以借助串口助手之类的软件监视一下。
此帖出自stm32/stm8论坛

点评

A1050电路很简单,我现在就是用串口1接受can的数据,一点都没有。  详情 回复 发表于 2017-2-10 15:45
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

4
 

此帖出自stm32/stm8论坛
 
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

5
 
本帖最后由 刘W杰 于 2017-2-10 15:51 编辑
chunyang 发表于 2017-2-10 15:35
给出具体电路,先排除硬件问题。这个也可以借助串口助手之类的软件监视一下。

A1050电路很简单,我现在就是用串口1接受can的数据,一点都没有。我把图发上去了,黑白的是从极,粉色的是主机。应该主从都要并120的电阻吧?谢谢指导。
此帖出自stm32/stm8论坛

点评

你用串口监视软件先查看一下串口TTL端的数据是否正常,正常则检查硬件,不对则是软件问题。  详情 回复 发表于 2017-2-10 16:02
 
 
 

回复

1万

帖子

141

TA的资源

版主

6
 
刘W杰 发表于 2017-2-10 15:45
A1050电路很简单,我现在就是用串口1接受can的数据,一点都没有。我把图发上去了,黑白的是从极,粉色的 ...

你用串口监视软件先查看一下串口TTL端的数据是否正常,正常则检查硬件,不对则是软件问题。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

141

TA的资源

版主

7
 
先看通讯发起方的发送端。
此帖出自stm32/stm8论坛

点评

恩恩,谢谢指导。 现在发送那部分可以了,原来发送端虚焊了。  详情 回复 发表于 2017-2-10 16:48
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

8
 
chunyang 发表于 2017-2-10 16:02
先看通讯发起方的发送端。

恩恩,谢谢指导。       现在发送那部分可以了,原来发送端虚焊了。
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 
A1050嵌入式电路很简单,我现在就是用串口1接受can的数据,一点都没有。我把图发上去了,黑白的是从极,粉色的是主机。应该主从都要并120的电阻吧?
此帖出自stm32/stm8论坛

点评

我已经搞好了,主要是2个的波特率要一致。  详情 回复 发表于 2017-2-12 00:11
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

10
 
建议先排除硬件的问题,我看到你的程序想到原子的例程了,你的这个程序有点像原子的例程。然后因为你的can的过滤的配置中,F407的地址和F103的地址看起来是一样的。
你能正常通讯就鬼了。。。。。

CAN_FilterIdHigh,CAN_FilterIdLow,CAN_FilterMaskIdHigh,CAN_FilterMaskIdLow这些才是重点。。。。
你两个程序都设置一样的。。。。。我感觉是有问题的。。。。。。。


还有你既然使能了中断,为什么NVIC不配置?

不需要can接收中断???
此帖出自stm32/stm8论坛

点评

一开始调试没有中断而已, 现在弄好了,主要是 波特率问题+线虚焊了,上面贴的程序也是波特率那里有问题而已,ID一样没影响,can通信没说不可以这样,因为那里掩码被我置为0x00。现在弄好 CAN接受中断+FIFO+索引。比  详情 回复 发表于 2017-2-12 00:15
 
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

11
 
sunyk 发表于 2017-2-10 17:11
A1050嵌入式电路很简单,我现在就是用串口1接受can的数据,一点都没有。我把图发上去了,黑白的是从极,粉 ...

我已经搞好了,主要是2个的波特率要一致。
此帖出自stm32/stm8论坛
 
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

12
 
huaiqiao 发表于 2017-2-10 18:01
建议先排除硬件的问题,我看到你的程序想到原子的例程了,你的这个程序有点像原子的例程。然后因为你的can ...

一开始调试没有中断而已, 现在弄好了,主要是 波特率问题+线虚焊了,上面贴的程序也是波特率那里有问题而已,ID一样没影响,can通信没说不可以这样,因为那里掩码被我置为0x00。现在弄好 CAN接受中断+FIFO+索引。比485通信麻烦了点。
此帖出自stm32/stm8论坛

点评

对的,其实我后来想了,因为你过滤器是0x00,相当于没有设置,即就是什么都接受。  详情 回复 发表于 2017-2-13 19:49
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

13
 
刘W杰 发表于 2017-2-12 00:15
一开始调试没有中断而已, 现在弄好了,主要是 波特率问题+线虚焊了,上面贴的程序也是波特率那里有问题 ...

对的,其实我后来想了,因为你过滤器是0x00,相当于没有设置,即就是什么都接受。
此帖出自stm32/stm8论坛

点评

恩恩  详情 回复 发表于 2017-2-18 22:10
 
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

14
 
huaiqiao 发表于 2017-2-13 19:49
对的,其实我后来想了,因为你过滤器是0x00,相当于没有设置,即就是什么都接受。

恩恩
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
您好,能解释一下波特率的问题么,上面贴的两段程序的波特率都是0.5M吧?
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表