stm32之can总线过滤器研究

发布者:PositiveEnergy最新更新时间:2024-10-12 来源: elecfans关键字: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总线  过滤器 引用地址:stm32之can总线过滤器研究

上一篇:ubuntu环境搭建stm32开发环境
下一篇:UCOSII在STM32F407上的移植

推荐阅读最新更新时间:2024-11-12 11:34

STM32 串口通信(库函数操作)
1.说在前面: 清明三天小假期,放松一下无可厚非,但是,依旧要完成自己的学习任务 2.串口通信的简单介绍: 1.将串口作为一个沟通的渠道,可以和外界进行接收和发送信号 2.STM32和串口相关的寄存器: 2-1:USART_SR(状态寄存器):存储着MCU的一些状态 2-2:USART_DR(数据寄存器):暂存着一些数据信息 2-3:USART_BRR(波特率寄存器:暂存波特率信息 2-4:USART_CRI(控制寄存器):用于给usart进行使能 3.注:波特率的计算方法: 只要给出相应的时钟频率和设置usartdiv,就可以计算出波特率 3.串口通讯的简单配置和使用 1.其实基于
[单片机]
<font color='red'>STM32</font> 串口通信(库函数操作)
STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI
1.AD7799介绍 AD7799结构图如下所示: 其中REFIN参考电压建议为2.5V, REFIN电压低于0.1V时,则差分输入ad值就无法检测了,如下图所示: 注意: 如果REG_CONFIG的REF_DET开启的话,那么输入AD值电压低于0.5V时,则差分输入ad值就无法检测了,如下图所示: 2.AD7799差分信号的输入模式 如下图所示,差分输入电压有3种模式: 注意: 单端输入电压(AIN-接地,只有正电压)则支持任意范围,比如In-Amp模式下,单端输入如果为10mv的话,也能检测到. 2.1 Unbuffered Mode非缓冲模式 该模式可测的AD值可以在 -30mV ~ (AVDD+30
[单片机]
STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI
STM32中断源位置
在...\CMSIS\Device\ST\STM32F10x中的stm32f10x.h, 然后在结构体IRQn_Type找到对应单片机型号的代码片段。 比如STM32F103C8T6属于STM32F10X_MD, 那对应的中断源为: 再比如STM32F103ZET6对应的是STM32F10X_HD
[单片机]
<font color='red'>STM32</font>中断源位置
STM32的内部温度传感器
1、STM32的内部温度传感器 STM32内部温度传感器与ADC的通道16相连,与ADC配 合使用实现温度测量。测量范围–40~125℃,精度 ± 1.5℃ 操作流程: 1)、设置ADC相关参数 // ADC1 configuration ----------------------------- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructu
[单片机]
基于STM32单片机发送字符串的函数
最近由于要调试一个SMS发送短信的模块,该模块需要发送一系列AT指令,且需要字符串发送,但是STM32官方给的usart.c中并没有直接发送字符串的函数,因此写了一个发送字符串的函数。 其实发送字符串的本质还是发送一个个字符,所以只需在字符串结束标志之前,循环发送字符即可。不罗嗦,上程序。 //程序功能:利用串口发送一个字符串 // 参数:USARTx USART编号 可取 USART1、USART2、USART3、USART4、 USART5(STM32F103ZET6) str 需要发送的字符串 #include “stm32f10x.h” void Usart_SendString(USART_TypeDef* US
[单片机]
STM32入门开发: NEC红外线协议解码(超低成本无线传输方案)
一、环境介绍 MCU: STM32F103ZET6 编程软件环境: keil5 红外线传输协议: NEC协议---38KHZ载波:。NEC协议是红外遥控协议中常见的一种。 解码思路: 外部中断 + 定时器方式 代码风格: 模块化编程,寄存器直接操作方式 完整keil工程源码下载(解压即可编译运行测试): https://download.csdn.net/download/xiaolong1126626497/19863275 二、NEC协议与解码思路介绍 2.1 采用的相关硬件 图1: 这是NEC协议的红外线遥控器: 如果自己手机没有红外线遥控器的功能,可以淘宝上买一个小遥控器来学习测试,成本不高
[单片机]
<font color='red'>STM32</font>入门开发: NEC红外线协议解码(超低成本无线传输方案)
STM32笔记——GPIO
GPIO简介 GPIO是通用输出输入端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集功能。 GPIO的基本结构 1、保护二极管与上下拉电阻 当外部输入电压高于VDD的电压时,上方的保护二极管导通,当外部输入电压底于Vss的电压时,上方的保护二极管导通,防止不正常电压引入芯片导致芯片烧毁。 2、P-MOS管和N-MOS管 在输出模式部分,线路经过一个由 P-MOS 和 N-MOS 组成的结构,这个结构使其拥有 推挽输出 和 开漏输出 的功能。 3、TTL肖特基触发器 4、IO耐压 STM32是一款3.3V电压的芯片,I
[单片机]
<font color='red'>STM32</font>笔记——GPIO
关于stm32的外部中断与事件的概念
最近在写stm32基础库的时候,发现了一个问题,就是外部中断里,有一个事件寄存器,一直没有明白是干什么用的。网上查了一下,写个总结。 主要的讲,就是在不进入到中断函数的情况下,触发其他的操作。比如,我希望在外部中断的时候,去采集ad。那么其他单片机的做法是,在中断函数中写入adc 采集。而在这里,只需要将事件寄存器置位,然后在其他外设寄存器中设置即可。这样设置,当外部中断被触发时,则可以不用在中断函数中处理adc。直接由事件来驱动adc采集。 这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部
[单片机]
关于<font color='red'>stm32</font>的外部中断与事件的概念
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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