mcp2515是can控制器,简单的来讲,就是只要配置好寄存器,芯片就能够自动的解析can数据帧,同时保存到接收缓存中,提醒单片机可以读取can的数据字节。

读取的方式是快速spi,可以达到10Mbits/s。当然,调试的时候,可以放低速度。前一篇文章已经分析了spi的调试步骤,这里不再分析。

can控制器有设置过滤器的功能,通俗的讲:不是can控制器想要的东西,我就过滤不接收,不放到接收缓存上,这样可以屏蔽了很多can总线上的无用的数据。

mcp251的接收缓存器控制寄存器中,有两位RXM设置,可以设置屏蔽的工作模式。

bit 6-5 RXM :接收缓冲器工作模式位
11 = 关闭屏蔽/滤波功能;接收所有报文
10 = 只接收符合滤波器条件的带有扩展标识符的有效报文
01 = 只接收符合滤波器条件的带有标准标识符的有效报文
00 = 接收符合滤波器条件的所有带扩展标识符或标准标识符的有效报文

一般易用00和11,英文文档中,10 ,01是保留的,因此中文文档也有不对的地方。

1、在调试的时候,建议不过滤,上位机发什么数据,就接收什么数据,以验证硬件和软件的基本功能是否正确。
2、如果上一步已经调试成功,说明mcp2515的驱动基本上是ok了。

3、然后可以开启“接收符合滤波器条件的所有带扩展标识符或标准标识符的有效报文”的功能,具体的方法可以参考下图:

我的屏蔽寄存器设置如下:说明是开启所有位屏蔽功能。所有id数据必须和我设置一样才能接收数据。

MCP2515_WriteByte(TXB0SIDH, 0xFF); //发送缓冲器0标准标识符高位
MCP2515_WriteByte(TXB0SIDL, 0xEB); //发送缓冲器0标准标识符低位
MCP2515_WriteByte(TXB0EID8, 0xFF); //发送缓冲器0标准标识符高位
MCP2515_WriteByte(TXB0EID0, 0xFF); //发送缓冲器0标准标识符低位

如果过滤位n如果是0,那么报文中的id的第n位也要0,

如果过滤位n如果是1,那么报文中的id的第n位也要1,

满足以上的两个条件,才是可以接受的数据id,否则将过滤掉,不接受。

如果要是屏蔽第n位设置为0,说名报文第n位数据mcp2515就不过滤,统统接收。

另外,调试过程中一定要记住电源要接好。

stm32管脚的输出电压最多是3.3V而有些芯片比如1050芯片的工作电压是大于4.75.从而导致芯片不能正常工作,外接个5Vdc解决问题。

mcp2515屏蔽寄存器和过滤寄存器的学习的更多相关文章

  1. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

  2. stm32寄存器版学习笔记07 ADC

    STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...

  3. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  4. stm32寄存器版学习笔记05 PWM

    STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...

  5. stm32寄存器版学习笔记10 SPI

    SPI(Serial Peripheral Interface),串行外围设备接口.SPI是一种高速的.全双工.同步的通信总线. SPI接口一般使用4条线通信: MISO 主设备数据输入,从设备数据输 ...

  6. stm32寄存器版学习笔记08 DMA

    DMA(Direct Memory Access),直接存储器访问.DMA传输方式无需CPU直接控制传输,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU效率大大提高.stm32f10 ...

  7. stm32寄存器版学习笔记04 定时计数器中断

    STM32共有8个定时计数器,其中TIME1和TIME8是高级定时器,TIME2~TIME5是通用定时器,TIME6和TIME7是基本定时器.以TIME3为例总结定时计数器的基本用法. 1.TIM3的 ...

  8. stm32寄存器版学习笔记02 串口通信

    stm32F103RCT6提供5路串口.串口的使用,只要开启串口时钟,设置相应的I/O口的模式,然后配置下波特率.数据位长度.奇偶校验等信息,即可使用. 1.串口的配置步骤 ①串口时钟使能 APB2外 ...

  9. stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)

    STM32的I/O口可以由软件配置成如下8种模式:输入浮空.输入上拉.输入下拉.模拟输入.开漏输出.推挽输出.推挽式复用功能及开漏复用功能.每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CR ...

随机推荐

  1. spring Valid @Pattern 常见的验证表达式

    1 匹配首尾空格的正则表达式:(^\s*)|(\s*$)   2 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 3 只能输入数字:"^[0-9]*$". 4 只 ...

  2. Unsafe API介绍及其使用

      废话 个人理解:java 出现的原因之一,就是对内存的管理:在c/c++,内存可以随心使用,超高的性能也伴有极高的风险:java极大的规避了这种风险,却也降低了程序运行的性能:那么java是否提供 ...

  3. gevent介绍(转)

    原文:https://www.liaoxuefeng.com/wiki/897692888725344/966405998508320 Python通过yield提供了对协程的基本支持,但是不完全.而 ...

  4. reactiveX沉思(草稿)

    一.第一性原理 将异步的io.事件解释为observable.并借用observer的一些类概念进行处理. ReactiveX is a library for composing asynchron ...

  5. 基于TCP实现的Socket通讯详解

    Socket通信是基于TCP协议进行的传输层通信,是在应用和应用之间的通信,一般应用在即时通讯上. 建立连接 用Socket创建连接需要在客户端和服务端都使用socket套接字. Linux内存创建S ...

  6. 重点|183道Java面试题可以说很详细了

    <p style="text-align: right;"><span style="font-size: 14px;color: rgb(136, 1 ...

  7. 1.0EnterpriseFrameWork 框架学习

    1.先报其主页 :博主的框架是开源的 http://www.cnblogs.com/kakake/p/3938262.html . 2.学习的精髓是:该框架支持 ORM.SQL语句 和 存储过程 ,O ...

  8. 发送邮件使用html模板的实现的大致思路

    客户最近有一个需求,大致的意思是提供一个 word文档,让其作为一个模板,在发送邮件的时候能够实现按照这个模板的样式和内容,替换其中 的一些字段,作为邮件的内容发给收件人.这个需求最大的问题就是在于这 ...

  9. c#读取数据库bool值

    数据库里bit这个布尔类型的字段,非常实用,但是在c#里读取时,许多人喜欢犯一些错误,导致运行报错. 实际中,有效的正确读取方法只有以下两种: int xxx= Convet.ToInt16(read ...

  10. 504 Gateway Time-out ( Nginx + PHP ) 解决小计

    问题 最近有个项目,运算量比较大,服务器经常报 504 Gateway Time-out 解决方案 fastcgi_connect_timeout 默认值是 60 第一次尝试修改为 120 ,仍然报5 ...