HAL库进行CAN通讯的程序编写说明1

  1. 关于CAN
    关于CAN的基本知识网上的资料很多,此篇文章只是针对快速应用,让新手对使用CAN有一个基本的了解,如有不对的地方请指正,因为我也是首次应用。
    对于CAN,我们需要了解以下的一些概念:
  • CAN的帧
    我们只需要知道在CAN中常用到的帧:远程帧与数据帧,设置时与RTR这个参数有关。
    对于CAN,CAN是用差分信号进行通讯的,就和串口通讯一样,CAN进行通讯时采用帧的结构,这个帧会包含帧起始,仲裁段等,这一类的资料很多,我在这里也不赘述,只讲实用的。我们在通讯过程中经常会用到的就是远程帧和数据帧。
    远程帧:它与数据帧不同的就是没有数据段,主要用于发送单元向接收单元进行取值、广播等操作,会包含ID信息。我们在操作远程帧时首先要设置好能让接收单元收数据的ID,配置好远程帧的标志位就可以进行发送了。
    数据帧:数据帧是包含数据段的,这个数据段可以是发送单元对接受单元的具体设置,也可以是接收单元响应发送单元的具体数据或操作。在发送时也是要设置好能让接收单元接收到的ID。
    举个例子:假设A为主节点,B为从节点,主节点每10ms会向从节点进行取数操作,此时我们A可以使用远程帧进行取数,B在收到A节点的远程帧后将相应的数据通过数据帧发送给A节点。而假设A节点通过USB与上位机进行连接,假设此时A节点收到上位机下发的设置系数命令时,A节点可以通过数据帧将设置的系数发送给B节点。
    具体的应用就看实际项目的需求,唯一需要注意的是对于ID的设置。

  • CAN的波特率
    CAN的波特率部分网上资料也很多,我只讲我自己所用的方法。
    波特率 = APB时钟/CAN分频系数/(传说中的SS+PTS+PBS1+PBS2+SJW)
    在使用HAL库时,这一部分就显得很简单了。举个例子吧。
    在这里插入图片描述
    在这里插入图片描述
    APB1采用24MHz的晶振频率,CAN的分频系数是3,对于SS+PTS+PBS1+PBS2+SJW也就是 1(这是固定的,SS)+ 7(PTS + PBS1)+
    2(PBS2) = 10,所以波特率 = 24000000/3/10 = 800000,也就是1/1250ns,这就是Time for one bit这个自动会计算出来的参数。

  • CAN的ID
    对于CAN的ID,有两个地方的概念需要说明。一个是发送帧时的ID,这个ID号是用来被接收单元进行滤波的ID号,也就是说我们在发送远程帧或者数据帧时肯定会设置一个ID,这个ID是发出去让别人去过滤的即判断是否需要进行接收,也就是StdId或者ExtId。而我们在设置CAN时会需要设置一个过滤器,这个过滤器中需要设置屏蔽码、验证码或者列表ID,这个设置完后就会按所设的ID值在每次接收到CAN数据时进行判断是否需要接收,如果不是过滤器设置下的ID就自动丢弃,不进入中断进行接收,也就是过滤别人发过来的ID是否需要进行接收。

  • CAN的帧格式
    这个帧格式分为标准帧和扩展帧。区别主要在于ID设置时的位数,一个只有11位,一个扩展为18位。使用哪一种需要根据实际情况。一般标准帧也够用了。设置时与IDE这个参数有关。

  • CAN的滤波模式
    CAN的滤波模式有列表模式和掩码模式两种。
    列表模式顾名思义就是做成一个表格,每个表格单元代表一个ID号,接收到的ID必须与表格内容一模一样才认为可以进行接收,这个方式在ID接收比较少的时候好用,越多就会越占资源。
    掩码模式就是忽略几位,只识别其中几位就行。比如说我接收100~109号ID的32位ID数据,列表模式下我得分别输入100至109的ID号,而掩码模式我可以只识别10x这个参数即可,我们就认为屏蔽码就是100这个数据所在的位,验证码就是共同拥有的那个特征值(假设ID = 100 = 0x00000064,那么掩码就是0x00000011相当于只关注最后一个字节的数据,其它位无所谓,而验证码就是10)。掩码虽然不能精确过滤,但这种方式对于多ID的情况是最佳的一个方式。
    另外过滤器还有位数的设置,可以16位也可以32位,都是对于过滤器ID设置上的不同。我们下一篇可以讲的具体些,很多人都是倒在这个地方。
    未完待续。。。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值