简介:

  1. CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。由德国电气商博世公司在1986年率先提出。此后,CAN通过ISO11898及ISO11519进行了标准化。现在在欧洲已是汽车网络的标准协议。
  2. CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。
  3. CAN具有很高的可靠性,广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。

特点:

  1. 多主控制。总线空闲时,所有单元都可发送消息,而两个以上的单元同时开始发送消息时,根据标识符(ID,非地址)决定优先级。两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。仲裁获胜(优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
  2. 系统柔软性。连接总线的单元,没有类似“地址”的信息,因此,在总线上添加单元时,已连接的其他单元的软硬件和应用层都不需要做改变。
  3. 速度快,距离远。最高1Mbps(距离<40M),最远可达10KM(速率<5Kbps)。
  4. 具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
  5. 故障封闭功能。CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
  6. 连接节点多。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

物理特征:

总线电平=CAN_H的电压-CAN_L的电压
显性电平对应逻辑0=总线电平为2V左右
隐性电平对应逻辑0=总线电平为0V

显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在CAN总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。

帧种类介绍:

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

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

STM32 CAN控制器简介:

  1. 支持CAN协议2.0A和2.0B主动模式
  2. 波特率最高达1Mbps
  3. 支持时间触发通信
  4. 具有3个发送邮箱
  5. 具有3级深度的2个接收FIFO
  6. 可变的筛选器组(也称过滤器组,最多28个,F1普通为14个,互联和F4为28个,另外F4有两个can,F1只有一个)

3种模式:
工作模式:

  • 初始化模式(INRQ=1,SLEEP=0)
  • 正常模式(INRQ=0,SLEEP=0)
  • 睡眠模式(SLEEP=1)

测试模式:

  • 静默模式( LBKM=0,SILM=1 )
  • 环回模式( LBKM=1,SILM=0 )
  • 环回静默模式(LBKM=1,SILM=1)

调试模式(不常用)

STM32 CAN筛选器位宽和模式配置:

CAN的标识符不表示目的地址而是表示发送优先级,接收节点根据标识符的值,来决定是否接收对应消息。

标识符屏蔽模式:过滤一组标识符
标识符列表模式:过滤一个标识符

例:设置筛选器组0工作在:1个32位筛选器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到CAN_F0R1的值就是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是设置我们需要必须关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位的必须和CAN_F0R1中对应的位一模一样,而另外的16个位则不关心,可以一样,也可以不一样,都认为是正确的ID,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。

波特率设置:

TM32F103,设TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps。

STM32F407,设TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。

寄存器:

CAN主控制寄存器(CAN_MCR)

该寄存器的我们仅介绍下INRQ位,该位用来控制初始化请求。
设置INRQ=0,可使CAN从初始化模式进入正常工作模式。
设置INRQ=1,可使CAN从正常工作模式进入初始化模式。
CAN初始化时,先设置INRQ=1,进入初始化模式,进行初始化(尤其是CAN_BTR的设置,该寄存器,必须在CAN正常工作之前设置),之后再设置INRQ=0,进入正常工作模式。

CAN位时序寄存器(CAN_BTR)设置波特率
CAN接收FIFO寄存器(CAN_RF0R/CAN_RF1R)
CAN发送邮箱标识符寄存器(CAN_TIxR)(x=0~2)
CAN发送邮箱数据长度和时间戳寄存器 (CAN_TDTxR) (x=0~2)
低4位用于设置发送多少个字节,最多为8个字节
CAN发送邮箱数据寄存器(CAN_TDLxR/CAN_TDHxR) (x=0~2)
CAN接收FIFO邮箱标识符寄存器(CAN_RIxR)(x=0/1)
CAN接收FIFO邮箱数据长度和时间戳寄存器(CAN_RDTxR) (x=0/1)
CAN接收FIFO邮箱邮箱数据寄存器(CAN_RDLxR/CAN_RDHxR) (x=0/1)
CAN筛选器模式寄存器(CAN_FM1R)(0标识符屏蔽,1标识符列表)
CAN筛选器尺度寄存器(CAN_FS1R)(0双16位,1单32位)
CAN筛选器FIFO关联寄存器(CAN_FFA1R)(0筛选器分到FIFO0,1筛选器分到FIFO1)
CAN筛选器激活寄存器(CAN_FA1R)(0未激活,1激活)
CAN筛选器组i寄存器x(CAN_FiRx)(i=0~27,x=1/2)(F103筛选器只有14个)

STM32之CAN总线原理相关推荐

  1. I2C 总线原理与架构

    一.I2C总线原理 I2C是一种常用的串行总线,由串行数据线SDA 和串行时钟线SCL组成.I2C是一种多主机控制总线,它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须 ...

  2. stm32 USART接收总线空闲中断--USART_IT_IDLE

    stm32 USART接收总线空闲中断--USART_IT_IDLE 版权声明:转载请注明作者和链接 https://blog.csdn.net/Hola_ya/article/details/815 ...

  3. 基于stm32的can总线彻底研究

    1.CAN总线的初始化 void can_init(void) {       CAN_InitTypeDef        CAN_InitStructure;       CAN_FilterIn ...

  4. 2个相同的 stm32 can通讯不成功_一文读懂,基于 STM32 和 CAN 总线的温度监控系统的设计方法...

    1 系统总体方案概述 系统总体框图如图 1 所示,本系统采用主站+从站的结构,CAN 主站主要实现温度数据的存储以及 CAN 总线协议和串口协议之间的桥接,CAN 从站主要实现温度的采集.CAN 从站 ...

  5. FlexRay总线原理及应用

    由于传统的CAN解决方案不能满足汽车线控系统(X-by-Wire) 的要求.于是在 2000 年 9 月 , 宝马和戴姆勒克莱斯勒联合飞利浦和摩托罗拉成立了 FlexRay 联盟.该联盟致力于推广 F ...

  6. pci总线原理(转)

    PowerPC汇编指令集 PowerPC 体系结构之指令集(综述) pci总线原理(转) 2011-05-04 16:06:41|  分类: hardware |  标签: |字号大中小 订阅 PCI ...

  7. STM32三条总线(AHB、APB1、APB2)的外设映射情况

    STM32三条总线(AHB.APB1.APB2)的外设映射情况 1.AHB (1)Flash储存器 (2)DMA (3)复位和时钟控制 (4)CRC (5)以太网 (6)SDIO 2.APB1总线(支 ...

  8. 基于STM32的CAN总线通信学习笔记

    转自:https://blog.csdn.net/ludaoyi88/article/details/53350077 基于STM32的CAN总线通信学习笔记 本文主要简单介绍CAN总线的相关概念,以 ...

  9. STM32 IAP 在线升级原理全解析

    点击左上角的"关注",定期更新 STM32 最新资讯,总有你想要的信息! STM32 IAP 在线升级原理全解析 1. 什么是 IAP?    IAP(In-Application ...

最新文章

  1. jquery刷新iframe页面的方法(兼容主流)
  2. DL之GD:利用LogisticGD算法(梯度下降)依次基于一次函数和二次函数分布的数据集实现二分类预测(超平面可视化)
  3. LFS(Linux From Scratch)学习
  4. http 412 precondition failed
  5. 查看scala变量数据类型_Scala文字,变量和数据类型| Scala编程教程
  6. 软件测试HW3 主路径覆盖测试
  7. testng自定义注解
  8. 管理信息系统案例分析_BIM案例分析—地下空间工程(二)
  9. 机器学习UCI数据库说明
  10. 一图读懂敏捷开发参与者及基本流程
  11. SAP PP模块工作中心主数据维护
  12. 常见的133个面试难题及解析
  13. java文件批量改名代码_[原创]JAVA版批量更名程序(附源码)(要求加分)
  14. Android SurfaceView、TextureView区别
  15. 硬件设计得好,软件就会多简单,以一个H桥电路来说说
  16. 苹果6手机服务器停止响应,iphone6被停用怎么办?苹果6被停用解决方法汇总
  17. Linux扩展文件分区
  18. PHP输出一段励志的话,至自己励志的一段话 鼓励拼搏的句子
  19. 曾经开发过Linux Mobile Platform的MiZi被风河收购。
  20. 期刊投稿状态_期刊投稿后文章可能的几种状态

热门文章

  1. MySQL入门之插入、删除、修改表数据
  2. 好玩gan_效果超赞服务器挤爆!用GAN生成人像油画火了,带你一秒回到文艺复兴...
  3. python判断回文数_Python实现判断一个整数是否为回文数算法示例
  4. sift算法_单应性Homograph估计:从传统算法到深度学习
  5. 计组之数据运算:12、加法器设计
  6. CC攻击(N个免费代理形成的DDOS)
  7. Python 查看pip安装的包的位置(查看pip安装包的路径)
  8. Permission denied的解决办法
  9. Qt:Qt实现飞秋拦截助手—介绍
  10. Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)