关于f407和f103can通信不上的问题?

2019-03-23 16:57发布

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

有人用过f407和f103can通信么? 为什么波特率一样,掩码那些都相同就是没反应。用逻辑分析仪接H,L,2条线的波形是这样的。
file:/// M)JE()]5M693YL$$R]3VMIL.png


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);
}



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



        


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
刘W杰
1楼-- · 2019-03-23 22:28
/ 2块can的芯片都是 A1050  ,回环测试都可以。
chunyang
2楼-- · 2019-03-23 23:43
给出具体电路,先排除硬件问题。这个也可以借助串口助手之类的软件监视一下。
刘W杰
3楼-- · 2019-03-24 00:42
 精彩回答 2  元偷偷看……
刘W杰
4楼-- · 2019-03-24 05:37
本帖最后由 刘W杰 于 2017-2-10 15:51 编辑
chunyang 发表于 2017-2-10 15:35
给出具体电路,先排除硬件问题。这个也可以借助串口助手之类的软件监视一下。

A1050电路很简单,我现在就是用串口1接受can的数据,一点都没有。我把图发上去了,黑白的是从极,粉 {MOD}的是主机。应该主从都要并120的电阻吧?谢谢指导。
chunyang
5楼-- · 2019-03-24 09:29
刘W杰 发表于 2017-2-10 15:45
A1050电路很简单,我现在就是用串口1接受can的数据,一点都没有。我把图发上去了,黑白的是从极,粉 {MOD}的 ...

你用串口监视软件先查看一下串口TTL端的数据是否正常,正常则检查硬件,不对则是软件问题。
chunyang
6楼-- · 2019-03-24 10:14
 精彩回答 2  元偷偷看……

一周热门 更多>