推荐

分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!https://www.cnblogs.com/captainbed

正文:
CANOpen最新全套教程:
1.CANOpen系列教程01_初识CAN与CANOpen及相关内容
2.CANOpen系列教程02_理解CAN总线协议
3.CANOpen系列教程03_CAN收发器功能、原理及作用
4.CANOpen系列教程04_CAN总线波特率、位时序、帧类型及格式说明
5.CANOpen系列教程05_CAN总线同步与位填充、优先级的决定
6.CANOpen系列教程06_结合代码理解CAN底层收发数据(含STM32例程)
7.CANOpen系列教程07_CANOpen协议概述
8.CANOpen系列教程08_CANOpen通信接口引导学习
9.CANOpen系列教程09_CANOpen对象字典
10.CANOpen系列教程10_关于Canfestival及对象字典生成工具环境搭建
11.CANOpen系列教程11_深度分析CanFestival_3架构
12.CANOpen系列教程12_对象字典编辑器操作说明
13.CANOpen系列教程13_协议源码移植(一)
14.CANOpen系列教程14_协议源码移植(二)
15.CANOpen系列教程15_NMT网络管理和相关源码说明
······

该系列教程已经在我的个人微信公众号 「strongerHuang」 整理并分享。因在这里分享文章,还需单独整理一遍,时间有限,就不再一一重复整理出来了。

想要查看更多相关教程,可以关注我的个人微信公众号「strongerHuang」,回复【CANOpen系列教程】即可查看。

申明:该文档由作者「strongerHuang」原创发布,仅供个人学习使用,转载请公众号联系作者授权。版权所有,禁止商用

一、写在前面

上一篇文章讲述了CAN和CANOpen,相信大家CAN和CANOpen有一定理解了。本文说的CAN即是一种总线,也是一种协议。因此,我们常听见CAN总线,也常听见CAN协议。

CAN协议和CANOpen协议是两套不同的协议。从软硬件层次来划分,CAN协议属于硬件协议,而CANOpen属于软件协议

本篇文章先概述一下CAN网络,让大家对CAN总线协议有一个全局的概念,再到底层的CAN总线协议知识。

二、CAN网络

CAN网络可以理解为多台CAN设备连接在同一条CAN总线上组合成的网络,其中的CAN设备我们称之为节点。CAN网络拓扑结构如下图:

如上图,一个CAN节点主要包含三类:MCU应用程序、CAN控制器、CAN收发器

2.1 MCU应用程序

MCU应用程序我将其分为三块:业务逻辑代码、协议层代码、底层驱动代码

A.业务逻辑代码:是根据项目需求而定,也很好理解。比如我读取一个传感器数据,并对其做出相应逻辑处理。

B.协议层代码:比如后续要讲述的CANOpen。

C.底层驱动代码:配置CAN总线相应参数、控制收发的代码。

2.2 CAN控制器

CAN控制器内部结构还是挺复杂的,一般现在CAN控制器都是与处理器集成在一起

其实对于编程的人来说,无非也就是包含一些控制、状态、配置等寄存器。

比如我们看到有些STM32芯片带有CAN,也就是说CAN控制器已经集成在STM32芯片中了,我们只需要编程操作其中的寄存器即可。

2.3 CAN收发器

CAN收发器:将CAN收发引脚(CAN_TX和CAN_RX)的TTL信号转换成CAN总线的电平信号

PS:你可以把CAN总线通信认为是UART通过485进行通信:CAN控制器就如UART的控制器,而CAN收发器就如485转换芯片。

三、ISO标准化的CAN协议

写这一章节的主要目的就是想让大家了解CAN总线位于OSI所在层次

3.1 ISO/OSI基本参照模型

【注】
ISO:International Standardization Organization国际标准化组织;
OSI:Open Systems Interconnection开放式系统间互联;

3.2 CAN在OSI模型中的定义

【注】
LLC:Logical Link Control逻辑链路控制;
MAC:Medium Access Control媒介访问控制;

从上图可以知道CAN总线底层硬件的内容(CAN控制器、收发器)主要位于OSI的第1层和第2层。

四、概述CAN总线协议

CAN总线协议:就是为了保证通信(收发)数据在CAN总线上能稳定传输而制订的一套协议。

CAN总线协议的内容很多,为方便初学者理解,本文先大概描述一下CAN总线协议,后续文章详细讲述CAN总线协议的内容。

4.1 总线信号

CAN总线为**「两线」「差分」**信号,用隐形代表逻辑1,显性代表逻辑0。如下图:

4.2 优先级

假如某一时刻,一个设备(节点)往总线发0,一个设备往总线发1。那么总线会呈现什么现象?

答案:最后总线呈现为显性,也就是0。

4.3 位时序

位时序逻辑将监视串行总线,执行采样并调整采样点,在调整采样点时,需要在起始位边沿进行同步并后续的边沿进行再同步。

简单的说就是对一个bit位分几段进行采样,目的就是提高数据传输稳定性。在STM32中底层驱动代码就需要进行位时序编程,在STM32参考手册中也会发现如下位时序图:

4.4 帧的种类和格式

帧的种类有多种:
数据帧:用于发送单元向接收单元传送数据的帧。
遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧。
错误帧:用于当检测出错误时向其它单元通知错误的帧。
过载帧:用于接收单元通知其尚未做好接收准备的帧。
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。

数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符ID,扩展格式有29个位的ID。

4.5 位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。如下图:

4.6 错误的种类

CAN总线协议内容很多,初学者先了解这些,后面文章具体到每一个点上,相信大家就会更明白其中的含义。

五、说明

1.该文档部分文字来自网络,仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号 「strongerHuang」,关注微信公众号回复【CANOpen系列教程】即可查看全系列教程。

六、最后

我的网站:www.strongerhuang.com
  
  我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号。

CANOpen系列教程02_理解CAN总线协议相关推荐

  1. CANOpen系列教程04_CAN总线波特率、位时序、帧类型及格式说明

    CANOpen最新全套教程: 1.CANOpen系列教程01_初识CAN与CANOpen及相关内容 2.CANOpen系列教程02_理解CAN总线协议 3.CANOpen系列教程03_CAN收发器功能 ...

  2. CANOpen系列教程01_初识CAN与CANOpen及相关内容

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!https://www.cnblogs.com/captainbed 正文: CANOpen ...

  3. CANOpen系列教程07_CANOpen协议概述

    置顶公众号,不错过每一条消息! 本教程由作者strongerHuang于2018年10月原创发布. 标签:CAN. CANOpen. CanFestival 版权所有:禁止商用 申明:该文档仅供个人学 ...

  4. EWSTM8系列教程02_新建基础软件工程

    IAR最新全套教程: 1.EWSTM8系列教程01_IAR介绍.下载.安装和注册 2.EWSTM8系列教程02_新建基础软件工程 3.EWSTM8系列教程03_主窗口.工具栏的概述 4.EWSTM8系 ...

  5. 单片机软件模拟SPI接口—加深理解SPI总线协议

    单片机软件模拟SPI接口-加深理解SPI总线协议   SPI(Serial Peripheral Interfacer 串行外设接口)是摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器臌控制器和外 ...

  6. CANOpen系列教程12_对象字典编辑器操作说明

    置顶/星标公众号,不错过每一条消息! 本教程由作者strongerHuang于2018年11月原创发布. 标签:CAN. CANOpen. CanFestival 版权所有:禁止商用 申明:该文档仅供 ...

  7. spring boot 项目源码_Spring Boot2 系列教程(三)理解 Spring Boot 项目中的 parent

    前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent><groupId& ...

  8. memcached完全剖析系列教程《转》 memcached完全剖析系列教程–2.理解memcached的内存存储...

    本文目录 Slab Allocation机制:整理内存以便重复使用 · Slab Allocation的主要术语 · 在Slab中缓存记录的原理 · Slab Allocator的缺点 · 使用Gro ...

  9. Spring Boot2 系列教程(七)理解自动化配置的原理

    Spring Boot 中的自动化配置确实够吸引人,甚至有人说 Spring Boot 让 Java 又一次焕发了生机,这话虽然听着有点夸张,但是不可否认的是,曾经臃肿繁琐的 Spring 配置确实让 ...

最新文章

  1. 基于SSM实现招聘网站
  2. 正则表达式 语言间通用
  3. checkbox 与文字对齐
  4. wc命令统计文件数据数量信息
  5. Selenium中WebDriver的close()和quit()
  6. php中glob怎么用,如何在php中利用glob函数对文件进行遍历
  7. java实心菱形_java打印出实心菱形与空心菱形
  8. 网络编程6_multiprocess模块.锁.队列
  9. 怎么让电脑运行速度变快_加快电脑运行速度的6个秘笈,系统安装,电脑维修必备技巧...
  10. 手把手教你用Python实现人脸识别,辨别真假!
  11. RHCSA 核心考点列表
  12. PhotoShopCS6从入门到精通--笔记
  13. 苹果酸-天冬氨酸穿梭
  14. Makefile 与 GCC G++ 入门
  15. 云豹POSPAL软件及硬件设置方法
  16. 年底了,如何高效的与领导提加薪?
  17. 克里金(Kriging)插值的原理与公式推导_转
  18. ppt文件不能打印出来怎么回事?
  19. 【面试真经】-redis系列
  20. 有趣的汉语:同音文(三):《饥鸡集矶记》

热门文章

  1. Kylin 在小米大数据中的应用
  2. 用Python实现背景音乐
  3. 二分查找 (二分搜索) 最通俗易懂的图解与实现
  4. Oracle EM 13c启动与关闭
  5. Latex插入图片却不显示问题小结
  6. HR不得不知的Excel技能——数据格式篇
  7. mysql: Data truncated for column ‘id‘ at row 1
  8. Nginx HTTP返回状态码修改
  9. JavaScript Switc归并排序
  10. VS Code打开vue文件出现很多黄色波浪线的解决办法(ESlint插件引起)