STM32 bxCAN

bxCAN 主要特性

  • 支持 2.0 A 及 2.0 B Active 版本 CAN 协议
  • 比特率高达 1 Mb/s
  • 支持时间触发通信方案

发送

  • 三个发送邮箱
  • 可配置的发送优先级
  • SOF 发送时间戳

接收

  • 两个具有三级深度的接收 FIFO
  • 可扩展的过滤器组:
    • 对于双 CAN,CAN1 和 CAN2 之间共享 28 个过滤器组
    • 对于单 CAN,则为 14 个过滤器组
  • 标识符列表功能
  • 可配置的 FIFO 上溢
  • SOF 接收时间戳

时间触发通信方案

  • 禁止自动重发送模式
  • 16 位自由运行定时器
  • 在最后两个数据字节发送时间戳

管理

  • 可屏蔽中断
  • 在唯一地址空间通过软件实现高效的邮箱映射

双 CAN 外设配置

  • CAN1:主 bxCAN,用于管理主/从 bxCAN 与 512 字节 SRAM 存储器之间的通信
  • CAN2:从 bxCAN,无法直接访问 SRAM 存储器。
  • 两个 bxCAN 单元共享 512 字节 SRAM 存储器。

单 CAN 外设配置

  • CAN3:具有专用存储器访问控制器单元和 512 字节 SRAM 存储器的主 bxCAN
    在这里插入图片描述
    在这里插入图片描述

bxCAN 工作模式

在这里插入图片描述

  • 初始化模式
    该模式下可以进行软件初始化。
    有些寄存器配置只能在该模式下进行。
    该模式下 CAN 不会接收和发送任何消息,并且 CANTX 输出隐性(高)。
    进入初始化模式不会更改任何配置寄存器。
  • 正常模式
    该模式下可以进行正常的发送和接收。
  • 睡眠模式(低功耗)
    该模式下,bxCAN 时钟停止。

测试模式

  • 静默模式
    只接收(有效数据帧和有效遥控帧)不发送(ACK 和错误标志会在内部从 Tx 发送到 Rx,但不会向外部发送)。
    在这里插入图片描述
  • 环回模式
    只能接收自身消息,不能接收外部消息。发送消息时一定会发送给自己,也会向外发送。
    在这里插入图片描述
  • 环回静默模式
    不对外发送消息,也不接收外部消息。只能在内部向自己发送消息。
    在这里插入图片描述

bxCAN 功能说明

发送处理

  1. 选择一个空的发送邮箱
  2. 设置标识符、数据长度代码 (DLC) 和数据
  3. 触发请求发送
  4. 邮箱进入挂起状态,等待成为优先级最高的邮箱
  5. 邮箱拥有最高优先级,同时 CAN 总线空闲,则开始发送
  6. 发送成功,邮箱恢复空状态
    在这里插入图片描述
  • 发送优先级
    • 按标识符
      当多个发送邮箱挂起时,标识符值最低的消息具有最高的优先级。如果标识符值相等,则首先安排发送编号较小的邮箱。
    • 按发送请求顺序
      将发送邮箱配置为发送 FIFO,按照发送请求顺序发送。
  • 中止
    中止发送请求时,在挂起或已安排状态下,邮箱立即中止。
  • 禁止自动重发送模式
    在此模式下,每个发送仅启动一次。
    如果第一次尝试失败,由于仲裁丢失或错误,硬件将不会自动重新启动消息发送。

时间触发通信模式

CAN 硬件会自己计数,并捕获计数器值(时间戳值)。该值不会发送到 CAN 总线。
在此模式下,CAN 硬件的内部计数器激活,在每个 CAN 位时间递增。
在接收和发送时,都会在帧起始位的采样点捕获内部计数器。

接收处理

在这里插入图片描述

标识符过滤

最多 28 个过滤器组 (27-0)。
每个过滤器组 x 均包含两个 32 位寄存器,分别是 CAN_FxR0 和 CAN_FxR1。

  • F1 系列
    • 互联型产品(STM32F105xx 和 STM32F107xx) CAN1 和 CAN2 分享 28 个过滤器组
    • 其它 STM32F103xx 系列 产品中有 14 个过滤器组
  • F4 系列
    • 对于双 CAN,CAN1 和 CAN2 之间共享 28 个过滤器组
    • 对于单 CAN,则为 14 个过滤器组
  • 可调整的宽度
    一个过滤器组可以:
    • 1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
    • 2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位
  • 掩码模式
    标识符寄存器与掩码寄存器关联,用以指示标识符的哪些位“必须匹配”,哪些位“无关”。
  • 标识符列表模式
    掩码寄存器用作标识符寄存器,使单个标识符的数量加倍。
    传入标识符的所有位都必须与过滤器寄存器中指定的位匹配。
  • 过滤器组尺度和模式配置
    在这里插入图片描述
  • 过滤器匹配索引
    使用同一个接收 FIFO 的所有过滤器组将按过滤器组号从小到达顺序重新从 0 到最大值对所有过滤器进行统一编号(称为过滤器编号或索引)。
    在这里插入图片描述
  • 过滤器优先级规则
    • 32 位过滤器优先于 16 位过滤器。
    • 对于尺度相等的过滤器,标识符列表模式优先于标识符掩码模式。
    • 对于尺度和模式均相等的过滤器,则按过滤器编号确定优先级(编号越低,优先级越高)。
      在这里插入图片描述

错误管理

在这里插入图片描述

位时序

  • 同步段 (SYNC_SEG) - 固定 1 Tq。
  • 位段 1 (BS1) - 定义采样点的位置。包括 CAN 标准的 PROP_SEG 和 PHASE_SEG1。1 ~ 16 Tq。
  • 位段 2 (BS2) - 定义发送点的位置。代表 CAN 标准的 PHASE_SEG2。1 ~ 8 Tq。
  • 再同步跳转宽度 (SJW) - 定义位段加长或缩短的上限。1 ~ 4 Tq。
    在这里插入图片描述
    在这里插入图片描述

bxCAN 中断

bxCAN 共有四个专用的中断向量。每个中断源均可通过 CAN 中断使能寄存器 (CAN_IER) 来单独地使能或禁止。
在这里插入图片描述

  • 发送中断可由以下事件产生:
    • 发送邮箱 0 变为空,CAN_TSR 寄存器的 RQCP0 位置 1。
    • 发送邮箱 1 变为空,CAN_TSR 寄存器的 RQCP1 位置 1。
    • 发送邮箱 2 变为空,CAN_TSR 寄存器的 RQCP2 位置 1。
  • FIFO 0 中断可由以下事件产生:
    • 接收到新消息,CAN_RF0R 寄存器的 FMP0 位不是“00”。
    • FIFO0 满,CAN_RF0R 寄存器的 FULL0 位置 1。
    • FIFO0 上溢,CAN_RF0R 寄存器的 FOVR0 位置 1。
  • FIFO 1 中断可由以下事件产生:
    • 接收到新消息,CAN_RF1R 寄存器的 FMP1 位不是“00”。
    • FIFO1 满,CAN_RF1R 寄存器的 FULL1 位置 1。
    • FIFO1 上溢,CAN_RF1R 寄存器的 FOVR1 位置 1。
  • 错误和状态改变中断可由以下事件产生:
    • 错误状况,有关错误状况的更多详细信息,请参见 CAN 错误状态寄存器 (CAN_ESR)。
    • 唤醒状况,CAN Rx 信号上监测到 SOF。
    • 进入睡眠模式。

CAN 寄存器

外设寄存器必须按字(32 位)进行访问。
有些寄存器只能在初始化模式下修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值