一、CAN总线的特点:

bxCAN主要特点

● 支持CAN协议2.0A和2.0B主动模式
● 波特率最高可达1兆位/秒
● 支持时间触发通信功能
发送
● 3个发送邮箱
● 发送报文的优先级特性可软件配置
● 记录发送SOF时刻的时间戳
接收
● 3级深度的2个接收FIFO
● 可变的过滤器组:
─ 在互联型产品中,CAN1和CAN2分享28个过滤器组
─ 其它STM32F103xx系列产品中有14个过滤器组
● 标识符列表
● FIFO溢出处理方式可配置
● 记录接收SOF时刻的时间戳
时间触发通信模式
● 禁止自动重传模式
● 16位自由运行定时器
● 可在最后2个数据字节发送时间戳
管理
● 中断可屏蔽
● 邮箱占用单独1块地址空间,便于提高软件效率
双CAN
● CAN1:是主bxCAN,它负责管理在从bxCAN和512字节的SRAM存储器之间的通信
● CAN2:是从bxCAN,它不能直接访问SRAM存储器

● 这2个bxCAN模块共享512字节的SRAM存储器

注:在中容量和大容量产品中,USB和CAN共用一个专用的512字节的SRAM存储器用于数据的发送和接收,因此不同同时使用USB和CAN(共享的SRAM被USB和CAN模块互斥地访问)。USB和CAN可以同时用于一个应用中但不能在同一个时间使用。

CAN总线的拓扑结构 CAN控制器是stm32芯片自带的,CAN收发器是专门外接的芯片,野火的开发板上是带的TJA1050

stm32 互联型产品的双CAN框图:

发送报文流程:

应用程序选择1个空置的发送邮箱;设置标识符,数据长度和待发送数据;然后对CAN_TIxR寄存器的TXRQ位置’1’,来请求发送。TXRQ位置’1’后,邮箱就不再是空邮箱;而一旦邮箱不再为空置,软件对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入挂号状态,并等待成为最高优先级的邮箱,参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态就变为预定发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空置邮箱;硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。如果发送失败,由于仲裁引起的就对CAN_TSR寄存器的ALST位置’1’,由于发送错误引起的就对TERR位置’1’。

发送报文的优先级:

由标识符决定
当有超过1个发送邮箱在挂号时,发送顺序由邮箱中报文的标识符决定。根据CAN协议,标识符数值最低的报文具有最高的优先级。如果标识符的值相等,那么邮箱号小的报文先被发送。
由发送请求次序决定
通过对CAN_MCR寄存器的TXFP位置’1’,可以把发送邮箱配置为发送FIFO。在该模式下,发送的优先级由发送请求次序决定。该模式对分段发送很有用。

接收管理
接收到的报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文。
有效报文
根据CAN协议,当报文被正确接收(直到EOF域的最后一位都没有错误),且通过了标识符过滤,那么该报文被认为是有效报文

FIFO管理
FIFO从空状态开始,在接收到第一个有效的报文后,FIFO状态变为挂号_1(pending_1),硬件相应地把CAN_RFR寄存器的FMP[1:0]设置为’01’(二进制01b)。软件可以读取FIFO输出邮箱来读出邮箱中的报文,然后通过对CAN_RFR寄存器的RFOM位设置’1’来释放邮箱,这样FIFO又变为空状态了。如果在释放邮箱的同时,又收到了一个有效的报文,那么FIFO仍然保留在挂号_1状态,软件可以读取FIFO输出邮箱来读出新收到的报文。
如果应用程序不释放邮箱,在接收到下一个有效的报文后,FIFO状态变为挂号_2(pending_2),硬件相应地把FMP[1:0]设置为’10’(二进制10b)。重复上面的过程,第三个有效的报文把FIFO变为挂号_3状态(FMP[1:0]=11b)。此时,软件必须对RFOM位设置1来释放邮箱,以便FIFO可以有空间来存放下一个有效的报文;否则,下一个有效的报文到来时就会导致一个报文的丢失。为挂号_3状态(FMP[1:0]=11b)。此时,软件必须对RFOM位设置1来释放邮箱,以便FIFO可以有空间来存放下一个有效的报文;否则,下一个有效的报文到来时就会导致一个报文的丢失。

报文的溢出:

当FIFO处于挂号_3状态(即FIFO的3个邮箱都是满的),下一个有效的报文就会导致溢出,并且一个报文会丢失。此时,硬件对CAN_RFR寄存器的FOVR位进行置’1’来表明溢出情况。至于哪个报文会被丢弃,取决于对FIFO的设置:
● 如果禁用了FIFO锁定功能(CAN_MCR寄存器的RFLM位被清’0’),那么FIFO中最后收到的报文就被新报文所覆盖。这样,最新收到的报文不会被丢弃掉。
● 如果启用了FIFO锁定功能(CAN_MCR寄存器的RFLM位被置’1’),那么新收到的报文就被丢弃,软件可以读到FIFO中最早收到的3个报文。
接收相关的中断
一旦往FIFO存入一个报文,硬件就会更新FMP[1:0]位,并且如果CAN_IER寄存器的FMPIE位为’1’,那么就会产生一个中断请求。当FIFO变满时(即第3个报文被存入),CAN_RFR寄存器的FULL位就被置’1’,并且如果CAN_IER寄存器的FFIE位为’1’,那么就会产生一个满中断请求。在溢出的情况下,FOVR位被置’1’,并且如果CAN_IER寄存器的FOVIE位为’1’,那么就会产生一个溢出中断请求。

标识符过滤
在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者乙广播的形式把报文发送给所有的接收者。节点在接收报文时-根据标识符的值-决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。在stm32普通产品中提供了14个位宽可变、可配置的过滤器(0~13),而互联产品则提供了28个位宽可变、可配置的过滤器(0~27),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件过滤从而占用一定的CPU开销。

过滤器可配置为,屏蔽位模式和标识符列表模式。
屏蔽位模式
在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。
标识符列表模式
在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。

过滤器组位宽和模式的设置
过滤器组可以通过相应的CAN_FMR寄存器配置。在配置一个过滤器组前,必须通过清除CAN_FAR寄存器的FACT位,把它设置为禁用状态。通过设置CAN_FS1R的相应FSCx位,可以配置一个过滤器组的位宽。通过CAN_FMR的FBMx位,可以配置对应的屏蔽/标识符寄存器的标识符列表模式或屏蔽位模式。
为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式
为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
应用程序不用的过滤器组,应该保持在禁用状态。
过滤器组中的每个过滤器,都被编号为(叫做过滤器号)从0开始,到某个最大数值-取决于过滤器组的模式和位宽的设置。

过滤器优先级规则
根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这种情况下,存放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:
● 位宽为32位的过滤器,优先级高于位宽为16位的过滤器
● 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式
● 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高

位时间特性



简单的说就是在can寄存器配置的时候对于寄存器CAN_CJW、CAN_BS1、CAN_BAS2的设置值,以及CAN_Prescaler的设置,

波特率=clk/(CAN_CJW+CAN_BS1+CAN_BAS2)/CAN_Prescaler。

以上就是CAN总线的部分知识,还有一些没有粘贴在这里,可以在stm32手册中查找,另外对于can寄存器的设置都是以上介绍的代码实现,因此在寄存器设置中有不理解的地方可以参考can总线的介绍。

转载于:https://www.cnblogs.com/longbiao831/p/4556283.html

stm32_CAN总线知识相关推荐

  1. 微型计算机总线的基本概念是什么,微型计算机总线知识.ppt

    微型计算机总线知识 电子发烧友 电子技术论坛 微计算机总线 总线出现的背景: 计算机部件要具有通用性,适应不同系统与不同用户的需求,设计必须模块化. 计算机部件产品(模块)供应出现多元化. 模块之间的 ...

  2. Compact PCI总线知识整理

    一. Compact PCI简介 Compact PCI(Compact Peripheral Component Interconnect)简称CPCI,中文又称紧凑型PCI,是国际工业计算机制造者 ...

  3. CAN总线知识总结(二)之数据帧及遥控

    CAN总线传输的是CAN帧,CAN的通信帧分为五种类型的帧结构,分别为:(1)数据帧:(2)遥控帧:(3)错误帧:(4)过载帧:(5)帧间隔. 其中错误帧.过载帧.帧间隔都是由硬件完成的,没有办法用软 ...

  4. 鸿蒙 OS 尖刀武器之分布式软总线技术全解析!

    作者 | 雷架 来源 | 爱笑的架构师(ID:DancingOnYourCode) 头图 |  CSDN 下载自东方IC 没有人能够熄灭满天星光 华为开发者大会2020在广东东莞松山湖欧洲小镇举办,在 ...

  5. 详解服务器异构计算FPGA基础知识

    随着云计算,大数据和人工智能技术应用,单靠CPU已经无法满足各行各业的算力需求.海量数据分析.机器学习和边缘计算等场景需要计算架构多样化,需要不同的处理器架构和GPU,NPU和FPGA等异构计算技术协 ...

  6. IIC总线协议及应用

    IIC总线协议及应用 I2C总线知识 I2C总线物理拓扑结构 I2C总线特征 I2C总线协议 数据有效性 响应 I2C总线操作 IIC总线应用案例 RT1052的LPI2C总线特性及架构 通讯引脚 驱 ...

  7. 硬件工程师需要学习哪些知识

    硬件工程师Hardware Engineer职位 要求熟悉计算机市场行情:制定计算机组装计划:能够选购组装需要的硬件设备,并能合理配置.安装计算机和外围设备:安装和配置计算机软件系统:保养硬件和外围设 ...

  8. 华为鸿蒙OS尖刀武器之分布式软总线技术

    本文 Github/javamap 已收录,有Java程序员进阶技术知识地图以及我的系列文章,欢迎大家Star. 目录 1 没有人能够熄灭满天星光 2 必须得补的传统总线知识 3 什么是分布式软总线? ...

  9. 硬件工程师基础知识架构

    硬件工程师基础知识架构 目的:基于实际经验与实际项目详细理解并掌握成为合格的硬件工程师的最基本知识. 基本设计规范 CPU基本知识.架构.性能及选型指导 MOTOROLA公司的PowerPC系列基本知 ...

最新文章

  1. TF-IDF(term frequency–inverse document frequency)
  2. 更新:让UpdatePanel支持上传文件
  3. BootstrapValidator验证
  4. 量子计算机如何确定量子状态,量子计算机六个量子位足以确定三个简单分子的基态...
  5. 区间DP{环形}:石子归并-2
  6. 分享一个IIS日志分析工具-LogParse
  7. JS对象 - Array属性方法汇总
  8. if语句与switch语句
  9. 解决C:\Users\Admin\AppData\Roaming\npm\nodemon.ps1
  10. 利用python识别身份证号后获取年龄和性别信息
  11. centos linux 修改系统默认语言设置,centos怎么更改语言设置为中文
  12. 党校报告称中国使用互联网每年需向美国付5000亿
  13. 鱼眼参数的数值计算优化方法
  14. LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程
  15. android系统的刷机步骤,怎么刷机安卓系统,自己就能刷机的方法,太方便了
  16. PG虚拟文件描述符(VFD)机制——封装的文件接口:postgresql-8.4.1/src/backend/storage/file/fd.c
  17. 杜子建:一个以弱势强的存在主义者
  18. 出海品牌如何制定海外网红营销策略?中腰部网红真的可靠吗?
  19. vivado调用IP核详细介绍
  20. dpdk-18.11网卡多队列RSS设置

热门文章

  1. XHTML 结构化:使用 XHTML 重构网站
  2. 3.放弃CHAR吧,在铸成大错之前!
  3. 8、Semantic-UI之其他按钮样式
  4. SQL删除一个数据库内所有表的数据保留表结构
  5. Mac+docker+flask
  6. [UE4]把工程升级到最新版本
  7. gerrit上sshkey设置问题
  8. UVa 11520 Fill the Square 填充正方形
  9. Apache认证、授权和访问控制
  10. win10便签常驻桌面_win7桌面便签小工具可以作为工作计划软件使用吗?