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);
上一篇:STM32 CAN总线调试经验
下一篇:STM32F407上调试freeRTOS问题
推荐阅读
史海拾趣
随着市场的不断发展,AVA电子意识到只有不断创新才能在竞争中保持领先。于是,公司加大了在研发方面的投入,引进了一批高素质的研发人才,并与多所高校和研究机构建立了合作关系。经过数年的努力,AVA电子成功研发出了一系列具有自主知识产权的电子产品,这些产品在性能、稳定性和用户体验等方面都达到了行业领先水平。这些创新产品的推出,不仅提升了公司的市场地位,也为公司带来了可观的利润。
Diplohmatic A/S公司最初是一家小型电子元件分销商,但其创始人对技术创新的执着追求引领了公司的转型。在一次偶然的机会中,公司研发团队发现了一种新型半导体材料,这种材料在能效和稳定性上远超市场同类产品。经过数月的研发和测试,公司成功将这种材料应用于新型电源管理芯片中,并迅速获得了市场的认可。这一创新不仅为公司带来了丰厚的利润,也奠定了其在电子行业的技术领先地位。
在追求经济效益的同时,Diplohmatic A/S公司也积极践行环保理念。公司投入资金研发环保型电子产品,采用可再生材料和节能技术,减少生产过程中的废弃物排放。此外,公司还积极参与环保公益活动,倡导绿色消费和低碳生活。这些举措不仅提升了公司的社会形象,也为推动电子行业的可持续发展做出了贡献。
Diplohmatic A/S公司非常重视企业文化的建设。公司倡导“创新、协作、诚信、共赢”的核心价值观,通过举办各类员工活动、开展团队建设和员工培训等方式,不断增强员工的归属感和凝聚力。这种积极向上的企业文化氛围激发了员工的创新精神和工作热情,为公司的持续发展提供了强大的动力。
在追求经济效益的同时,台湾诚阳(BC)公司也积极履行企业社会责任。公司关注环保和可持续发展,致力于推广绿色电子产品和节能减排技术。同时,公司还积极参与社会公益事业,为当地社区的发展做出贡献。这种对社会责任的承担和关注,使得台湾诚阳在业界树立了良好的形象,赢得了社会各界的认可和尊重。
请注意,以上故事仅为虚构示例,并不代表台湾诚阳(BC)公司或任何真实公司的实际情况。如果您对该公司有进一步的了解需求,建议直接访问其官方网站或查阅相关新闻报道。
[求助]关于直接通过I/O接口访问硬盘数据的可能性及思路的探索。 这个问题大概是这样的: 在OS里要访问硬盘上的数据要经过文件系统,现在我想不经过文件系统,直接对硬盘上的数据进行读写。 我的思路来自于市场上的硬盘播放器(就是可以直接播放硬盘里的多媒体文件的设备)。查了一 ...… 查看全部问答∨ |
|
请问在wince里怎样用wifi发送特定数据 有人说就是socket编程,我没想明白,难道系统会自动调用wifi? 还请各位前辈指点迷津!… 查看全部问答∨ |
|
小弟在研究硬盘电机的驱动,我曾试过用小功率管9013,8050,8550等等来搭成达林顿管子,但是驱动电机的时候发热严重,而且明显有气无力...虽然能转...在网上找了很久,想用场效管IRF540N来驱动,但是不知道电路如何搭建...求各位高手,走过路过的能 ...… 查看全部问答∨ |
|
大三嵌入式又要分方向了, ARM 、 PCL、 单片机,感觉吧....就是没感觉,有没有前辈给这三个方向的发展,优缺点,就业情况分析一下啊? 小弟先谢谢了....!!! … 查看全部问答∨ |
|
针对beaglebone 扩展板,进行Linux驱动的调试! 好久没有发帖子了!今天来分享一下针对beaglebone 扩展板,进行Linux驱动的调试吧! 第二次修正beaglebone板子的外围电路还是比较顺利的! 具体编译内核的过程就不在介绍了!论坛里有很多人写了这方面的教程,Ti官方的文档也提供了较为全面的编译 ...… 查看全部问答∨ |
都到这个点了,真的好瞌睡啊,希望这个文档能对初学的人带来帮助 我也是磕磕绊绊好几周才弄懂了整个开发的流程,希望初学的人来看 看我这篇文档,在开发中少走弯路,不走弯路 我是西安电子科技大学测控技术与仪器专业的学生,欢迎交流,共同进步 ...… 查看全部问答∨ |