linux的canopen编程代码,CANOpen系列教程06_ 结合代码理解CAN底层收发数据

a84aa36e27dd180116456d6ec38f2c01.png

1写在前面

该教程前面讲述了许多关于CAN协议的一些概念,可能许多初学者看的云里雾里,那么本文将结合代码让大家理解之前讲述的内容。

因为关注我的人大部分都在学习STM32,我将结合STM32F103、标准外设库例程来让大家理解之前讲述的一些概念。

本文主要讲述内容:

1.传输数据相关参数

2.位时序及传输波特率

为方便大家理解,我将在最后提供对应例程「CANOpen系列教程06_CAN底层收发例程」。当然,本文只讲述代码中部分内容,某些配置参数放在后面讲述。

2

传输数据相关参数

传输数据相关参数其实主要就是前面《CANOpen系列教程04》讲述的“帧类型及格式说明”那一章节内容,建议先看下那些概念内容。

CAN总线传输的内容主要就是发送和接收,下面我将结合代码中发送和接收参数来让大家理解我们编程控制CAN总线上那些参数。

2.1 CAN总线数据帧

本文提供例程主要是CAN总线使用最多的数据帧为例,让大家理解数据帧传输由我们编程控制的参数。

先看下图回顾一下数据帧格式,其中有些字段内容由控制器自动完成,如:帧起始,CRC校验。而有些就是由我们编程控制,如:ID、数据等。

790d7828ffa820384aab83ad8f6cc478.png

2.2 CAN发送代码

A.CAN发送数据结构

下图主要就是CAN发送由我们编程控制的参数。其实你会发现,主要就是上面帧格式中部分内容:ID、IDE、RTR、DLC、Data。

b0868efe1c31bff1506efff590896881.png

B.发送配置参数

下图为实际发送配置的参数。

6ad65fd2920713048674716321753eb4.png

2.3 CAN接收代码

CAN接收其实和发送类似,CAN总线上的字段就那些,在接收端接收的那些参数无非就是发送端发送出来的那些参数。

针对STM32内部集成的CAN,接收数据结构多了一个FMI参数,大概意思就是接收消息邮箱筛选器索引。

a06290cea7698bebbc19b8f46e3db09b.png

接收操作

为方便初学者理解,这里这要就是使用中断接收CAN总线数据,在中断函数里面打印也主要是用于测试,一般实际项目打印不会出现在中断函数(打印相对耗时)。

005ebc93ef9d6b9719bfd6e23c3c91e9.png

3

位时序及传输波特率

同样,在前面《CANOpen系列教程04》中有讲述“位时序及传输波特率”的概念。其实,位时序间接决定了传输的波特率。换句话说,传输的波特率由位时序几个参数决定。

看下图,回顾一下波特率计算公式:

8607759dd9c3043f6ae0e4a4caf9cdab.png

3.1 波特率配置代码

结合上图计算公式和下图代码,可以看出位时序中几个参数和波特率的关系。波特率为1M时,几个位时序参数可以配置为如下图值:

342c9e48ad59b3dc66bb5a35ad49f38b.png

提示:

36M代表CAN时钟,具体要看时钟相关配置。

波特率固定,位时序参数可以不同。比如波特率固定为1M,位时序参数可以为上图配置;也可以修改其中的值,如修改位段1为CAN_BS1_5tq,位段2为CAN_BS2_3tq。只要遵循波特率计算公式即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值