STM32F1 芯片自带 bxCAN 控制器 (Basic Extended CAN),即基本扩展 CAN,可与 CAN 网络进行交互,它支持 2.0A 和 B 版本的 CAN 协议。旨在以最少的CPU 负载高效管理大量的传入消息,并可按需要的优先级实现消息发送。在攸关安全性的应用中,CAN 控制器提供所有必要的硬件功能来支持 CAN 时间触发通信方案。
STM32F1 的 bxCAN 的主要特性有:
·支持 CAN 协议 2.0A 和 2.0B 主动模式
·波特率最高达 1Mbps
·支持时间触发通信
·具有 3 个发送邮箱
·具有 3 级深度的 2 个接收 FIFO
·可变的过滤器组( 互联网产品中有 28 个, CAN1 和 CAN2 共享,其他STM32F103xx 有 14 个)
我们使用的 STM32F103ZET6自带 1 个 CAN 控制器,而 STM32F105/STM32F107互联网型含有 2 个 CAN 控制器,互联网型只是比 STM32F103 多一个而已。下面我们就来看下互联网型它内部结构,如下图所示:
从CAN 内部结构图可以看出,CAN1 是主设备,CAN2 是从设备。框图中的“存储访问控制器”是由 CAN1 控制的,CAN2 无法直接访问存储区域,所以如果使用 CAN2 的时候必须先使能CAN1 外设的时钟,我们使用的 STM32F103ZET6只含有 CAN1。框图中主要包含 CAN 控制内核、发送邮箱、接收 FIFO 以及验收筛选器,下面我们就依次进行简单介绍。
(1)标号 1:CAN 控制内核
CAN 控制内核包含了各种控制/状态寄存器,我们主要讲解其中的主控制寄存器 CAN_MCR 及位时序寄存器 CAN_BTR。
①控制寄存器 CAN_MCR主控制寄存器 CAN_MCR 负责管理 CAN 的工作模式,寄存器如下:
②位时序寄存器(CAN_BTR)
CAN 外设中的位时序寄存器 CAN_BTR 用于配置测试模式、波特率以及各种位内的段参数。该寄存器如下:
1.测试模式