stm32之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号。

stm32之can总线过滤器研究,布布扣,bubuko.com

时间: 2024-10-06 08:32:42

stm32之can总线过滤器研究的相关文章

STM32的FSMC总线驱动ili9341,掉电重启无法正常显示的问题

问题描述 通过STM32的FSMC总线驱动ili9341,程序调试和刚下载的时候,显示完全正常.可是就在我掉电关机,重新启动的时候就完全跑飞了.这令我非常疑惑.以下是我的FSMC总线配置程序, static void LCD_FSMC_Config(void) { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef p; p.FSMC_AddressSetupTime = 0x02; p

关于STM32的CAN的过滤器

STM32普通型芯片的CAN有14组过滤器组,互联型有28组过滤器组.一般我们用的都是普通型的,所以在本文中可以说STM32有14组过滤器组. 根据配置,每1组过滤器组可以有1个,2个或4个过滤器.这些过滤器相当于关卡,每当收到一条报文时,CAN要先将收到的报文从这些过滤器上"过"一下,能通过的报文是有效报文,收进FIFO中,不能通过的是无效报文(不是发给"我"的报文),直接丢弃.所有的过滤器是并联的,即,一个报文只要通过了一个过滤器,就是算是有效的. 每组过滤器组

shiro内置过滤器研究

转载: http://blog.csdn.net/hxpjava1/article/details/7035724 http://liureying.blog.163.com/blog/static/615135201362054127651/

STM32——CAN总线波特率和位时序详解

本人用的单片机是STM32F407,其它型号的单片机类似,可做参考! 一.标准CAN协议位时序概念 由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯.同时,CAN还使用“位同步”的方式来抗干扰.吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常.为了实现这个位同步,CAN协议将每个位的时序分解为四段:SS段.PTS段.PSB1段.PBS2段.同时定义最小的时间单位:Tq,四个段的长度用x个Tq表示,加起来就是一个

STM32之usart

1.uart与usart的区别 UART:universal asynchronous receiver and transmitter 通用 异步 接收 发送 [总线信号] TX , RX USART:universal synchronous asynchronous receiver and transmitter 通用 同步 异步 接收 发送 [总线信号] TX, RX, CK 总体来说,usart只是比uart多了一个同步信号,usart可以使用同步方式进行信息的收发 同步传输与异步传

西数科技第七期培训课表

一:第一大部分内容:MRT的固件培训和实用技巧.(讲师:庄工.卢工)1. 西数硬盘的ROM结构讲解.------ROM框架解析----- OA,0B,30,47,4F,20B,0D模块的解析------47.40如何校验匹配信息------30模块的妙用------ROM模块功能的实用技巧------适配ROM2. 西数硬盘的SA区结构讲解,-----西数SA区的各个模块的解析-----01模块的妙用-----02模块的修复方法-----30.01.02.12模块的配合使用方法(案例)-----

2014年计算机软考《网络管理》知识点-【第八章】

51CTO学院,在软考备考季特别整理了"2014年计算机软考<网络管理>知识点",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年计算机软考<网络管理>知识点汇总  第八章 网络应用 8.1多用户应用 8.1.1 局域网环境下的多用户应用 (1) 标识用户:用来登陆到局域网上的账户标识或用户标识. (2) 访问磁盘扇区: (3) 实用根目录中的文件; 8.1.2 文件共享与记录锁定 (1) 应用程序使用文

stm32之定时器彻底研究

分类: C/C++ 这里介绍两种方式使用stm32的定时器:直接操作寄存器和使用st的官方的库文件. 相比较而言,直接操作定时器比较简洁,对着寄存器看十分明了.而使用库文件有一点晕头转向. (个人观点) 程序如下:(以下程序在DX32的例程修改而来,使用的是比较古老的3.0固件库) 1.timer.c文件 #include "STM32Lib\\stm32f10x.h"void TIM2_Configuration(void){ TIM_TimeBaseInitTypeDef  TIM

stm32内部的CAN总线

功能概述: bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B:它的设计目标是以最小的CPU负载来高效处理大量的报文.它也支持报文发送的优先级要求(优先级可软件配置). CAN2.0B内核: bxCAN模块可以完全自动地接收和发送CAN报文,且完全支持标准标识符(11位)和扩展标识符(29位). 主要特征: 支持CAN协议2.0A和2.0B主动模式: 波特率最高可达1兆位/秒:(属于OSI11898标准) 支持时间触发通信功能:(可以通过