历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2019年10月08日 | STM32F103 CAN总线配置总结

发布者:qin199099 来源: eefocus关键字:STM32F103  CAN  总线配置 手机看文章 扫描二维码
随时随地手机看文章

stm32的can总线的配置如下:


      CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式

      CAN_InitStructure.CAN_ABOM=DISABLE;

      CAN_InitStructure.CAN_AWUM=DISABLE;

      CAN_InitStructure.CAN_NART=DISABLE;//CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失) 

      CAN_InitStructure.CAN_RFLM=DISABLE;

      CAN_InitStructure.CAN_TXFP=DISABLE;

      CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;

      //CAN_Mode_LoopBack

      //CAN_Mode_Normal

      CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;

      CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;//1--16

      CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;//1--8

      CAN_InitStructure.CAN_Prescaler=2;

 

      CAN_Init(&CAN_InitStructure);

       /* CAN filter init */

      CAN_FilterInitStructure.CAN_FilterNumber=0;//选择过滤器0

      CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//指定过滤器被设置为标识符屏蔽模式

      CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//给出过滤器位宽为32位

下面根据设置的参数不同来决定can总线can总线的配置情况:


1、对扩展数据帧进行过滤:(只接收扩展数据帧)

      CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<3)&0xFFFF0000)>>16;

      CAN_FilterInitStructure.CAN_FilterIdLow   = (((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

(注:标准帧数据帧、标准远程帧和扩展远程帧均被过滤)

2、对扩展远程帧过滤:(只接收扩展远程帧)

      CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<3)&0xFFFF0000)>>16;

      CAN_FilterInitStructure.CAN_FilterIdLow   = (((u32)slave_id<<3)|CAN_ID_EXT|CAN_RTR_REMOTE)&0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

3、对标准远程帧过滤:(只接收标准远程帧)

      CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<21)&0xffff0000)>>16;

      CAN_FilterInitStructure.CAN_FilterIdLow   = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_REMOTE)&0xffff;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

4、对标准数据帧过滤:(只接收标准数据帧)

      CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<21)&0xffff0000)>>16;

      CAN_FilterInitStructure.CAN_FilterIdLow   = (((u32)slave_id<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFF;

5、对扩展帧进行过滤:(扩展帧不会被过滤掉)

      CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<3)&0xFFFF0000)>>16;

      CAN_FilterInitStructure.CAN_FilterIdLow   = (((u32)slave_id<<3)|CAN_ID_EXT)&0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC;

6、对标准帧进行过滤:(标准帧不会被过滤掉)

      CAN_FilterInitStructure.CAN_FilterIdHigh   = (((u32)slave_id<<21)&0xffff0000)>>16;

      CAN_FilterInitStructure.CAN_FilterIdLow   = (((u32)slave_id<<21)|CAN_ID_STD)&0xffff;

      CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;

      CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC;

注:slave_id为要过滤的id号。

标准帧,扩展帧混合配置:


void CAN_Configuration(void)

{

CAN_InitTypeDef        CAN_InitStructure;

  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

// CAN_DeInit();

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE); //

RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE ); //复位CAN1所有寄存器

 

/* CAN cell init */

CAN_InitStructure.CAN_TTCM=DISABLE;   //ʹÄÜ»òÕß½ûֹʱ¼ä´¥·¢Í¨ÐÅģʽ

CAN_InitStructure.CAN_ABOM=DISABLE;   //ʹÄÜ»òÕß½ûÖ¹×Ô¶¯¹Ø±Õ¹ÜÀí

CAN_InitStructure.CAN_AWUM=DISABLE;   //ʹÄÜ»òÕß½ûÖ¹×Ô¶¯»½ÐÑģʽ

CAN_InitStructure.CAN_NART=ENABLE;//DISABLE;   //使能或禁止自动重传模式

CAN_InitStructure.CAN_RFLM=DISABLE;   //ʹÄÜ»òÕß½ûÖ¹½ÓÊÕFIFOËø¶¨Ä£Ê½

CAN_InitStructure.CAN_TXFP=DISABLE;   //ʹÄÜ»òÕß½ûÖ¹·¢ËÍFIFOÓÅÏȼ¶

CAN_InitStructure.CAN_Mode= CAN_Mode_Normal;   //CANÓ²¼þ¹¤×÷ÔÚÆÕͨģʽÏ CAN_Mode_Normal   CAN_Mode_LoopBack

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;   //

CAN_InitStructure.CAN_BS1=CAN_BS1_4tq;   //

CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;   //

CAN_InitStructure.CAN_Prescaler=1;   //4000K/(1+1+4)/1 = 500K

CAN_Init(&CAN_InitStructure);

 

#define   ID_REQUEST                          0xf9

  /*第0组滤波器初始化 CAN filter init */

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 = (((u32)ID_REQUEST<<21)&0xffff0000)>>16;

//(u32)(((CAN_EXT0_ID<<3)&0xFFFF0000)>>16);

CAN_FilterInitStructure.CAN_FilterIdLow =  (((u32)ID_REQUEST<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;

//(u32)(((CAN_EXT0_ID<<3)|CAN_ID_STD|CAN_RTR_DATA)&0xFFFF);

CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;

CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;

CAN_FilterInit(&CAN_FilterInitStructure);

/*第1组滤波器初始化 CAN filter init */

CAN_FilterInitStructure.CAN_FilterNumber=1; //第1组滤波器

CAN_FilterInitStructure.CAN_FilterIdHigh=(u32)(((CAN_EXT1_ID<<3)&0xFFFF0000)>>16);

CAN_FilterInitStructure.CAN_FilterIdLow=(u32)(((CAN_EXT1_ID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨µÍ£©

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;

CAN_FilterInit(&CAN_FilterInitStructure);

/*µÚ3×éÂ˲¨Æ÷³õʼ»¯CAN filter init */

CAN_FilterInitStructure.CAN_FilterNumber=3; //µÚ3×é¹ýÂËÆ÷

CAN_FilterInitStructure.CAN_FilterIdHigh=(u32)(((CAN_EXT3_ID<<3)&0xFFFF0000)>>16); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨¸ß£©

CAN_FilterInitStructure.CAN_FilterIdLow=(u32)(((CAN_EXT3_ID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨µÍ£©

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;

CAN_FilterInit(&CAN_FilterInitStructure);

/*µÚ5×éÂ˲¨Æ÷³õʼ»¯CAN filter init */

CAN_FilterInitStructure.CAN_FilterNumber=5; //µÚ5×é¹ýÂËÆ÷

CAN_FilterInitStructure.CAN_FilterIdHigh=(u32)(((CAN_EXT5_ID<<3)&0xFFFF0000)>>16); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨¸ß£©

CAN_FilterInitStructure.CAN_FilterIdLow=(u32)(((CAN_EXT5_ID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨µÍ£©

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;

CAN_FilterInit(&CAN_FilterInitStructure);

/*µÚ6×éÂ˲¨Æ÷³õʼ»¯CAN filter init */

/* CAN_FilterInitStructure.CAN_FilterNumber=6; //µÚ6×é¹ýÂËÆ÷

CAN_FilterInitStructure.CAN_FilterIdHigh=(u32)(((CAN_EXT6_ID<<3)&0xFFFF0000)>>16); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨¸ß£©

CAN_FilterInitStructure.CAN_FilterIdLow=(u32)(((CAN_EXT6_ID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨µÍ£©

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;

CAN_FilterInit(&CAN_FilterInitStructure);*/

/*µÚ9×éÂ˲¨Æ÷³õʼ»¯CAN filter init */

/* CAN_FilterInitStructure.CAN_FilterNumber=9; //µÚ9×é¹ýÂËÆ÷

CAN_FilterInitStructure.CAN_FilterIdHigh=(u32)(((CAN_EXT9_ID<<3)&0xFFFF0000)>>16); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨¸ß£©

CAN_FilterInitStructure.CAN_FilterIdLow=(u32)(((CAN_EXT9_ID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨µÍ£©

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;

CAN_FilterInit(&CAN_FilterInitStructure);*/

/*µÚ13×éÂ˲¨Æ÷³õʼ»¯CAN filter init */

/* CAN_FilterInitStructure.CAN_FilterNumber=13; //µÚ13×é¹ýÂËÆ÷

CAN_FilterInitStructure.CAN_FilterIdHigh=(u32)(((CAN_EXT13_ID<<3)&0xFFFF0000)>>16); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨¸ß£©

CAN_FilterInitStructure.CAN_FilterIdLow=(u32)(((CAN_EXT13_ID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF); //Ñ¡Ôñ¹ýÂËÆ÷±êʶºÅ£¨µÍ£©

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;

CAN_FilterInit(&CAN_FilterInitStructure);*/

  /* CAN FIFO0 message pending interrupt enable */ 

  CAN_ITConfig(CAN_IT_TME, ENABLE);

CAN_ITConfig(CAN_IT_FMP0, ENABLE);

CAN_ITConfig(CAN_IT_FF0, ENABLE);

CAN_ITConfig(CAN_IT_FOV0, ENABLE);

/* CAN_ITConfig(CAN_IT_FMP1, ENABLE);

CAN_ITConfig(CAN_IT_FF1, ENABLE);

CAN_ITConfig(CAN_IT_FOV1, ENABLE);

CAN_ITConfig(CAN_IT_EWG, ENABLE);

CAN_ITConfig(CAN_IT_EPV, ENABLE);

CAN_ITConfig(CAN_IT_BOF, ENABLE);

[1] [2]
关键字:STM32F103  CAN  总线配置 引用地址:STM32F103 CAN总线配置总结

上一篇:STM32 CAN总线调试经验
下一篇:STM32F407上调试freeRTOS问题

推荐阅读

        IT之家10月8日消息 三星在全球各地都拥有生产三星智能手机的工厂。《韩国先驱报》于上月底发表的一片报道称,三星已经开始将其在中国销售的部分产品外包。三星A6s  消息称,三星的部分产品已经外包给了与小米有密切业务联系的闻泰科技(Wingtech)。尽管官方并未对此发表评论,但外媒PhoneArena消息称,三星A6s的WiFi认证信息显示,手...
图(01)是Unitrode公司(已被德州仪器公司并购)生产的UC1525A(与UC2535A、UC3525A相同,三个型号仅工作温度范围不同)开关电源控制芯片用变压器驱动半桥的电路。图中Q1和Q2为功率开关MOS管,T1为驱动变压器,T2为功率输出的主变压器。图(01)  图(01)中我们见到驱动变压器T1具有两个次级,反相驱动两个功率开关MOS管Q1和Q2。  与上次贴出的SG3525经变压器...
NVIDIA发布重磅应用、系统以及与宝马集团合作 NVIDIA提出了下一代计算的愿景,该愿景将全球信息经济的重心从服务器转移到了新型的强大且灵活的数据。 NVIDIA创始人兼首席执行官在其加州住宅的厨房中录制的六集同时发布的主题演讲中,介绍了NVIDIA最近对Mellanox的收购,还有重盼所归的基于NVIDIA Ampere 架构的新产品以及重要的最新软件技术。 这场...
之前有客户问LCR和阻抗分析仪都能测电阻、电感、电容,那么他们有什么区别呢,今天安泰测试就给大家分享一下。阻抗(electrical impedance)是电路中电阻、电感、电容对交流电的阻碍作用的统称。阻抗衡量流动于电路的交流电所遇到的阻碍。阻抗将电阻的概念加以延伸至交流电路领域。LCR 测试仪和阻抗分析仪被设计用于测试电子元件在某些频率或宽频率范围内...

史海拾趣

问答坊 | AI 解惑

欧姆龙PLC中断问题

欧姆龙PLC如何实现中断,从那里进入及退出,请高人指点!…

查看全部问答∨

[求助]关于直接通过I/O接口访问硬盘数据的可能性及思路的探索。

这个问题大概是这样的:     在OS里要访问硬盘上的数据要经过文件系统,现在我想不经过文件系统,直接对硬盘上的数据进行读写。     我的思路来自于市场上的硬盘播放器(就是可以直接播放硬盘里的多媒体文件的设备)。查了一 ...…

查看全部问答∨

请问在wince里怎样用wifi发送特定数据

请问在wince里怎样用wifi发送特定数据 有人说就是socket编程,我没想明白,难道系统会自动调用wifi? 还请各位前辈指点迷津!…

查看全部问答∨

ST选型

请问谁清楚ST的哪个8位机有2个PWM,3个定时器,10路ADC,34个I/O(含10个AD口) ,是用来做电源的。wendellyang@163.com…

查看全部问答∨

热电堆 信号选择

小弟最近想做一个用于微波炉的温度测量的红外探测模块。由于以前都没有做过项目,所以经验非常少,现在我苦于热电堆型号的挑选。         网上看了看有这些:SC0067、SC0070、10TP583T、OTP系列(如OTP-537F2、OTP- ...…

查看全部问答∨

关于硬盘无刷电机的驱动

小弟在研究硬盘电机的驱动,我曾试过用小功率管9013,8050,8550等等来搭成达林顿管子,但是驱动电机的时候发热严重,而且明显有气无力...虽然能转...在网上找了很久,想用场效管IRF540N来驱动,但是不知道电路如何搭建...求各位高手,走过路过的能 ...…

查看全部问答∨

差分放大器低通滤波器设计

有没谁用差分放大器做个低通滤波器的?请指点小弟一下,谢了...…

查看全部问答∨

大三学生方向分流,求好心人指点

大三嵌入式又要分方向了, ARM 、 PCL、 单片机,感觉吧....就是没感觉,有没有前辈给这三个方向的发展,优缺点,就业情况分析一下啊? 小弟先谢谢了....!!!   …

查看全部问答∨

针对beaglebone 扩展板,进行Linux驱动的调试!

好久没有发帖子了!今天来分享一下针对beaglebone 扩展板,进行Linux驱动的调试吧! 第二次修正beaglebone板子的外围电路还是比较顺利的! 具体编译内核的过程就不在介绍了!论坛里有很多人写了这方面的教程,Ti官方的文档也提供了较为全面的编译 ...…

查看全部问答∨

J_smiason教你走进quartus,全程设计FPGA

都到这个点了,真的好瞌睡啊,希望这个文档能对初学的人带来帮助 我也是磕磕绊绊好几周才弄懂了整个开发的流程,希望初学的人来看 看我这篇文档,在开发中少走弯路,不走弯路 我是西安电子科技大学测控技术与仪器专业的学生,欢迎交流,共同进步 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved