STM32 CAN应用-过滤器设置

发布者:平和的心态最新更新时间:2017-10-30 来源: eefocus关键字:STM32  CAN  过滤器设置 手机看文章 扫描二维码
随时随地手机看文章

在使用STM32的CAN控制器进行数据收发,当用到位屏蔽模式的时候,就要设置过滤器了,这个关系到是否能够接收到想要的数据。下面针对几种不同情况对CAN过滤器(Filter)进行设置。


  1. CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; //标示符屏蔽模式  

  2. CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;  

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


  1. CAN_FilterInitStructure.CAN_FilterIdHigh =(EXT_ID >> 13) & 0xFFFF;  

  2. CAN_FilterInitStructure.CAN_FilterIdLow =((EXT_ID << 3) | (0x04)) & 0xFFFF;   

  3. //这里设置|0x04(0b0100)就是为了IDE=1,RTR=0,  

  4. //这里也可以写为(EXT_ID << 3)|CAN_ID_EXT|CAN_RTR_ROMOTE,效果一样,下同  

  5. CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;  

  6. CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;  

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


  1. CAN_FilterInitStructure.CAN_FilterIdHigh =(EXT_ID >> 13) & 0xFFFF;  

  2. CAN_FilterInitStructure.CAN_FilterIdLow =((EXT_ID << 3) | (0x06) & 0xFFFF;   

  3. //这里设置|0x06(0b0110)就是为了IDE=1,RTR=1  

  4. CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;  

  5. CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;  

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


  1. CAN_FilterInitStructure.CAN_FilterIdHigh =((STD_ID << 21) & 0xFFFF0000)>>16;  

  2. CAN_FilterInitStructure.CAN_FilterIdLow =((STD_ID << 21) | (0x0)) & 0xFFFF;   

  3. //这里设置|0x0(0b0000)就是为了IDE=0,RTR=0  

  4. CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFE0; //0xFFE0表示要关注11位的STD_ID  

  5. CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0006;  //0110,表示要关注IDE和RTR位,只接受标准,不接受扩展  

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


  1. CAN_FilterInitStructure.CAN_FilterIdHigh =((STD_ID << 21) & 0xFFFF0000)>>16;  

  2. CAN_FilterInitStructure.CAN_FilterIdLow =((STD_ID_ID << 21) | (0x06)) & 0xFFFF;   

  3. //这里设置|0x02(0b0010)就是为了IDE=0,RTR=1  

  4. CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFE0;  

  5. CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0006;//只接受标准数据帧,不接受扩展数据帧  



关键字:STM32  CAN  过滤器设置 引用地址:STM32 CAN应用-过滤器设置

上一篇:关于STM32串口首字符出现乱码的问题
下一篇:STM32F407 单通道ADC采样,DMA传输

推荐阅读最新更新时间:2024-03-16 15:42

linux搭建stm32开发环境
下载stm32固件库 创建目录 libs目录放stm32固件库,src放用户源码,inc放用户头文件 # mkdir libs src inc 将STM32F10x_StdPeriph_Lib_V3.5.0复制到libs目录下 创建Makefile.common 在主目录下创建 Makefile .common文件,这个是通用Makefile文件 #This file is included in the general Makefile, the libs Makefile and the src Makefile #Different optimize settings for library and sou
[单片机]
linux搭建<font color='red'>stm32</font>开发环境
基于ARM处理器的CAN节点设计
引言 随着信息技术的飞速发展,基于ARM在嵌入式系统方面的优势和CAN总线的广泛应用,目前越来越多的ARM处理器内部自带了CAN控制器,极大的方便了开发人员对CAN总线的开发。本课题是基于ARM2104的微处理器CAN总线系统节点开发,采用CAN总线可以将节点控制器直接安装在现场,数据经处理后发送到总线上,实现了信息的全数字方式传输,提高了传输的抗干扰能力,增加了信息的传输量。 总体设计方案 本课题中所设计的是CAN总线系统节点,系统节点结构图如图1。 图1 系统节点结构图 CAN总线系统应用要求:CAN总线接口的扩展、点对点通信。 CAN节点的设计主要是CAN通信控制器与微处理器之间、CAN总线收发器与物理总线之
[单片机]
基于ARM处理器的<font color='red'>CAN</font>节点设计
STM32的ADC和串口
如果简单的使用USART的话配置相当简单,只要配置一下波特率,数据长度,停止位长度,校验位。然后再设置一下串口的引脚,输入为上后输入,输出为利用推挽输出。这样一来串口就配置好了,如果使用库则一目了然,如果使用寄存器操作会繁琐一点找各个寄存器,因为设置波特率和设置数据长度等这些并不在一个寄存器中设置完成,还有可能忘记个别设置而无法找其原因。但寄存器操作的效率会很高。如下配置: void USART_Initial(uint32_t Baud) { USART_InitTypeDef USART_InitStruct; USART_GPIO(); //配置串口引脚 USART_InitStruct.USART_BaudRate=Bau
[单片机]
stm32通过IO口模拟输出多路pwm
这里主要用于控制舵机,使用TIM1模拟了5路50Hz的PWM信号,只调节占空比控制舵机角度。 最大能模拟多少路没有具体测试。 缺点:因为是定时器中断模拟(中断比较频繁),所以会影响main函数运行。 LED p1('A',8); //IO口初始化,这里就不介绍了,推挽输出 LED p2('A',9); LED p3('A',10); LED p4('A',11); LED p5('A',4); u16 count=0; u16 pwm_count=1000; //总计数 周期20ms,20us进次 u16 pwm1=25; u16 pwm2=
[单片机]
STM32笔记——外部中断的配置
一、选择对应芯片 常规操作,这里我们选择F407ZGT6 二、配置sys 选择Serial Wire 三、配置RCC 选择高速外部时钟晶振,系统自动配置相应引脚。 四、配置外部中断引脚 通过查看开发板原理图,找出按键对应引脚 五、设置外部中断引脚 1、上升沿触发(外部中断触发引脚上的电平从低电平跳转到高电平) 2、下降沿触发(外部中断触发引脚上的电平从高电平跳转到低电平) 3、上下边沿均触发 (外部中断触发引脚上有电平变化) 六、开启外部中断 七、配置中断优先级 八、配置时钟 九、生成工程 HAL库GPIO函数库讲解 1、外部中断服务函数 void HAL_GPIO_EXTI_IRQ
[单片机]
<font color='red'>STM32</font>笔记——外部中断的配置
STM32笔记---DMA(USART)的演示
 这里有个小小的例子,来演示DMA模块与系统程序并行工作。   用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。   使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。   这个是相应的代码例子,基于STM32F103VBT6 /****************************************************************************** * 本文件实现串口发送功能(通过重构
[单片机]
STM32 DMA模块的配置与使用
DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。 有多少个DMA资源? 有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。 数据从什么地方送到什么地方? 外设到SRAM(I2C/UART等获取数据并送入SRAM); SRAM的两个区域之间; 外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比); SRAM到外设(SRAM中预先保存的数据送入DAC产生各种波形); ……还有一些目前还搞不清楚的。 DMA可以传递多少数据?
[单片机]
<font color='red'>STM32</font> DMA模块的配置与使用
基于VSCode搭建STM32开发环境
众所周知, Keil 是一款收费软件,虽然可以Po解使用,但很多 公司 还是有点害怕,想必有不少读者都收到过**函。 之前,开发 单片机 项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种格局被打破。 因为 VSCode 免费且好用,可以安装各种插件,很多 工程师 逐渐从Keil 转向了 VSCode。而且,VSCode还能实现 Keil 不能实现的一些功能。 下面就给大家分享一下 VSCode 搭建 STM32 开发环境的一些常规且使用的功能。 一、需要的软件和工具 下载 最新版 VS Code: 安装好插件,具有良好的代码补全与调试功能。 下载 LLVM:用于代码补全,其实可以理解
[单片机]
基于VSCode搭建<font color='red'>STM32</font>开发环境
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved