2927|1

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32F107 CAN通讯问题 [复制链接]

各位达人,我在做CAN1回环测试时,能正常收发数据;但改成正常模式时不能收发;CAN2回环模式和正常都不能正常收发。
/* CAN1 register init */
        CAN_DeInit(CAN1);
        CAN_StructInit(&CAN_InitStructure);
       
        /* CAN1 cell init */
        /* CAN1 cell init */
        CAN_InitStructure.CAN_TTCM=DISABLE;                // ê±¼ä′¥·¢
        CAN_InitStructure.CAN_ABOM=DISABLE;                // ×Ô¶ˉàëÏß1üàí
        CAN_InitStructure.CAN_AWUM=DISABLE;                // ×Ô¶ˉ»½DÑ
        CAN_InitStructure.CAN_NART=ENABLE;                // ENABLE;′íÎó2»×Ô¶ˉÖØ′«£¬DISABLE:ÖØ′«
        CAN_InitStructure.CAN_RFLM=DISABLE;
        CAN_InitStructure.CAN_TXFP=DISABLE;
        CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;                //Õy3£′«êäÄ£ê½ CAN_Mode_Normal;»Ø»·Ä£ê½×Ô·¢×ÔêÕ CAN_Mode_LoopBack
        CAN_InitStructure.CAN_SJW=CAN_SJW_2tq;                        //1-4
        CAN_InitStructure.CAN_BS1=CAN_BS1_12tq;                        //1-16
        CAN_InitStructure.CAN_BS2=CAN_BS2_6tq;                        //1-8
        CAN_InitStructure.CAN_Prescaler=6;                                // 2¨ìØÂê= 36/(9*(1+12+7))=200k
        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);
       
        CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);
        CAN_ClearFlag(CAN1,CAN_FLAG_RQCP0);
  CAN2和上面的设置差不多,只是CAN_FilterInitStructure.CAN_FilterNumber=14;
主流程中每隔500毫秒发送一次
                TxMessage.StdId = 0x01;                TxMessage.RTR = CAN_RTR_DATA;
                TxMessage.IDE = CAN_ID_STD;  // CAN_ID_EXT CAN_ID_STD
                TxMessage.DLC = 1;
                TxMessage.Data[0] = 0x08;                  
                CAN_Transmit(CAN1,&TxMessage);
中断函数 分别是在void CAN1_RX0_IRQHandler(),void CAN2_RX0_IRQHandler()中读数据,判断RxMessage.StdId是否==0x01  ;
求大虾门指点···························
此帖出自stm32/stm8论坛

最新回复

http://www.amobbs.com/thread-5358029-1-1.html 你可以借鉴一下!  详情 回复 发表于 2013-11-6 09:28
点赞 关注
 

回复
举报

116

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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