• mcp2515屏蔽寄存器和过滤寄存器的学习


    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解决问题。

     

  • 相关阅读:
    c++的一些个学习及总结
    简单回合制游戏流程
    c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind
    二叉搜索树、平衡二叉树、红黑树
    STL之空间配置器
    centos 7 安装mysql及常用操作
    生产服务器问题定位
    Linux常用命令
    Garbage First(G1) 垃圾收集器
    垃圾回收算法和垃圾收集器
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11937979.html
Copyright © 2020-2023  润新知