STM32---CAN

目录

一.CAN协议简介

二.CAN物理层

三.CAN的协议层

1.位时序

2.CAN的报文

四.CAN外设

1.主控制寄存器CAN_MCR

2.位时序寄存器CAN_BTR

3.CAN的发送邮箱 

4.CAN的接收FIFO

5.验收筛选器

五.CAN库函数相关结构体

1.初始化GPIO结构体:

2.初始化CAN结构体

3.发送及接收结构体

4.筛选器结构体

六.写代码

易出错点:


一.CAN协议简介

CAN是Controller Area Network的缩写。它具有高可靠性和错误检查能力,广泛应用在汽车计算机控制系统和环境恶劣,电磁辐射强及振动大的工业环境。

二.CAN物理层

CAN是异步通讯,半双工。有CAN_High和CAN_Low两条通讯信号线共同组成一组差分信号线。

CAN物理层的形式主要分为闭环总线和开环总线网络。

  1. 闭环总线网络:高速,短距离,两端串联120欧的电阻
  2. 开环总线网络:低速,远距离。两根总线独立,不形成闭环,每条线上串联2.2k欧电阻

 什么是差分信号?差分信号又称差模信号。使用差分信号传输时,需要两根线,这两个信号的振幅相等,相位相反,通过两条线的电压差来表示逻辑0和逻辑1.

差分信号的抗干扰性强,共模噪声完全被抵消。它对外部的电磁干扰可以有效抑制。差分信号的时序定位精准。由于差分信号的这些优点,在USB协议,485协议,以太网协议以及CAN协议的物理层中都使用了差分信号传输。

CAN总线上可以挂载多个节点,节点之间的信号经过总线传输。CAN总线对数据内容进行编码,所以网络中的节点数量不受限制,只要总线的负载足够即可,可以通过中继器增强负载。

CAN_Tx和CAN_Rx使用普通的类似TTL的逻辑信号,而CAN_High和CAN_Low是差分信号。收发器起到两种信号相互转换的作用。

在高速CAN协议中,表示逻辑1(隐形电平),电压差为0;表示逻辑0(显性电平),电压差为2V。在CAN协议中,必须使它处于隐形电平或者显性电平。如果同一时间有一个节点是隐形电平(逻辑1),另一个节点是逻辑0(显性电平),类似I2C的线与特性将使它处于显性电平逻辑0的状态。

三.CAN的协议层

CAN没有时钟信号线,节点间使用配置好的波特率进行通讯,还会使用位同步方式来吸收误差。

1.位时序

为了实现位同步,CAN协议把每一个数据位的时序分解成SS,PTS,PBS1,PBS2四段。分解的最小时间单位为Tq。

信号的采样点在PBS1和PBS2之间。

  •  SS:同步段。当检测到信号跳变沿在SS范围内,则表示节点与总线是同步的,采样点是有效的。SS段固定为1Tq.
  • PTS:这个时间段用来补偿网络的物理延时。
  • PBS1:用来补偿边沿阶段的误差,可以加长。
  • PBS2:用来补偿边沿阶段的误差,可以缩短。

举例说明PBS1和PBS2对于位同步的作用:

        当信号跳变的边沿不在SS段内,而是出现在SS段之前时,可以通过缩短PBS2,使得下一次边沿来临时,落在SS段内;当信号跳变边沿出现在SS段之后时,可以通过加长PBS1,使得下一次边沿来临时,落在SS段内。

2.CAN的报文

(1)有哪些种类?

  • 数据帧:向外发送数据
  • 遥控帧:请求数据
  • 错误帧:通知校验错误,请求重新发送上一个数据
  • 过载帧:通知远端节点本节点尚未做好接收准备
  • 帧间隔:将数据帧和遥控帧与前面的帧分离开来

(2)数据帧的结构?

  •  帧起始:1个低电平,用于通知各个节点有数据传输,其他节点通过帧起始信号的电平跳变边沿进行硬同步。
  • 帧结束:7个连续的高电平。
  • 仲裁段:主要内容是ID信息。数据帧有标准格式和扩展格式,区别在于ID信息的长度。
  • 控制段
  1. RTR:远程传输请求位。为1,是遥控帧;为0,是数据帧。
  2. IDE:标识符扩展位。为1,是扩展格式;为0,是标准格式。
  3. SRR:用于代替标准格式的RTR,只用于扩展格式。
  4. r0,r1:默认低电平,是保留位。
  5. DLC:数据长度,表示报文中的数据段有多少个字节。 
  • 数据段:发送的数据,MSB先行。
  • CRC:校验码。当出现错误时,它会像发送节点反馈,利用错误帧请求重新发送。
  • ACK:接收节点发送0表示应答。

ID信息在CAN协议中的作用?

  • ID信息决定数据帧发送的优先级。由于线与特性,当总线上同时出现两个节点竞争主权时,ID信息中首先出现低电平的即为优先者。CAN协议不分配中断优先级或者地址,谁可以优先占有总线由信息的重要性决定,也就是ID信息。
  • ID信息决定其他节点是否会接收这个数据帧。因为在CAN总线上数据都是广播出去的,所以在总线上的所有节点都可以收到其他节点的信息。由于CAN控制器大多具有根据ID信息过滤报文的功能,它通过ID信息来分辨是否是自己要接收的报文。

四.CAN外设

1.主控制寄存器CAN_MCR

  • DBF调试冻结:处于程序调试模式才使用。可以设置CAN处于工作模式还是禁止收发状态,禁止收发时仍可以访问接受FIFO中的数据。
  • TTCM时间触发模式:设置CAN的时间触发通信模式。在此模式下,CAN使用它内部定时器产生时间戳,并把它保存在CAN_RDTxR,CAN_TDTxR寄存器中。可以利用它实现标准分时同步通信功能。
  • ABOM自动离线管理:当节点检测到他发送错误或者接受错误超过一定值时,会自动离线管理。离线状态下,不能接收或者发送。
  • AWUM自动唤醒:在使用软件进入睡眠后,如果使用自动唤醒,在检测到总线活动时,会自动唤醒。
  • NART自动重传:当报文发送失败会自动重传直到成功为止。
  • RFLM锁定模式:锁定接收FIFO。锁定之后,当接收FIFO溢出时,会丢弃下一个接收的报文。若不锁定,则会覆盖掉之前的报文。
  • TXFP报文发送优先级的判定方法:当邮箱中有多个报文需要发送时,控制它是根据报文的ID优先级还是报文存进邮箱的顺序来发送。

2.位时序寄存器CAN_BTR

  • SILM:为0,正常模式;为1,静默模式
  • LBKM:为1,允许回环模式;为0,禁止回环模式

CAN有四种工作模式。由位时序寄存器的SILM和LBKM组合控制。

 静默模式可以用于分析总线上的流量,用于检测。

回环模式可以用于自检。

回环静默模式在热自检的时候使用(自我检查的时候,不会干扰总线)。

在STM32中的位时序:

SYNC_SEG,BS1,BS2三段,采样点位于BS1和BS2交界处。SYNC_SEG的固定长度是1Tq.BS1和BS2的长度SJW可以在位时序寄存器中配置。

波特率:

STM32的CAN1和CAN2挂载在APB1上。APB1总线的最大频率是36MHz。在使用CAN2时,必须打开CAN1的时钟。

3.CAN的发送邮箱 

CAN外设有三个发送邮箱,即最多可以缓存3个待发送报文。 每个发送邮箱中包含有四个寄存器。

  • 标识符寄存器CAN_TIxR(存储待发送报文的ID,扩展ID,IDE位及RTR位),
  • 数据长度控制寄存器CAN_TDTxR(存储待发送报文的DLC段),
  • 低位数据寄存器CAN_TDLxR(存储数据段的低四个字节内容),
  • 高位数据寄存器CAN_TDHxR(存储高四字节的内容)

发送邮箱的工作过程:当需要发送报文时,把报文分解成各个段存储到不同的寄存器中,并对标识符寄存器的发送请求位置1,即可把数据发送出去。

4.CAN的接收FIFO

CAN外设有2个接收FIFO,每个FIFO中有3个邮箱,即最多可以缓存6个接收报文。当接收到报文时,FIFO报文计数器会自增,当报文被读取之后,计数器会自减。和发送邮箱类似,FIFO有四个寄存器。

  • 标识符寄存器CAN_RIxR(存储接收报文的ID,扩展ID,IDE位及RTR位),
  • 数据长度控制寄存器CAN_RDTxR(存储接收报文的DLC段),
  • 低位数据寄存器CAN_RDLxR(存储数据段的低四个字节内容),
  • 高位数据寄存器CAN_RDHxR(存储高四字节的内容)

5.验收筛选器

STM32F103的CAN外设有14个筛选器组,每组有两个寄存器。CAN1和CAN2共用筛选器。筛选器的作用下,节点只接受需要的报文到自己的FIFO中。筛选器可以调整筛选ID的长度和过滤模式

(1)根据筛选ID长度分类:

  • 32位:STDID[10:0],EXTID[17:0],IDE,RTR
  • 16位:STDID[10:0],EXTID[17:15],IDE,RTR

(2)根据过滤方式分为:

  • 标识符列表模式:要求报文与列表中的ID的每一个标识符相同才接收。
  • 掩码模式:只要报文ID中规定的某些位相同,就会被接收。

筛选尺度寄存器CAN_FS1R的FSCx位可以设置工作在32位还是16位;筛选模式寄存器CAN_FM1R的FBMx位可以设置工作在标识符列表模式还是掩码模式。每组筛选器有2个32位寄存器,分别为CAN_FxR1,CAN_FxR2,用来存储要筛选的ID或者掩码。

五.CAN库函数相关结构体

1.初始化GPIO结构体:

因为需要使用引脚的复用功能,所以需要打开AFIO时钟使用GPIO_Remap函数对CAN1选择Remap1方案(参考数据手册表32).

 

为什么需要使用IO的复用功能?

看STM32的CAN电路原理图,Tx和Rx连接到PB8和PB9上,这两个引脚是在重映射条件下才能作为CAN接口使用的。在使用复用功能重映射的引脚配置时,需要打开AFIO的时钟。

2.初始化CAN结构体

3.发送及接收结构体

4.筛选器结构体

六.写代码

回环模式:用于自测。

 

 

 

易出错点:

  1. 引脚使用了重映射,需要打开AFIO的时钟,以及进行GPIO_Remap配置。
  2. CAN模式配置中需要使传输速率为1Mbps。注意BS1,BS2,SJW,分频因子的取值。
  3. 筛选器配置,特别是模式的配置,还有IDHigh,IDLow。
  4. 需要配置NVIC,设置中断优先级;打开CAN的接收中断。对应地,需要在it.c文件里写对应的中断服务函数。中断服务函数中需要对接收到的数据进行ID筛选,决定是否接收。

  • 20
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 CAN-FD源码是指STMicroelectronics(意法半导体)提供的用于控制CAN-FD(CAN Flexible Data Rate)功能的源代码。 CAN-FD是可扩展数据率控制器区域网络的一种升级版本,它可以提供更高的数据传输速率和更大的数据包长度。STM32是STMicroelectronics开发的一款32位微控制器系列,该系列芯片集成了CAN-FD控制器,因此提供了针对CAN-FD功能开发的源码。 STM32 CAN-FD源码可以通过意法半导体的官方网站或STM32的开发者社区获取。这些源代码提供了控制CAN-FD控制器的各种功能的实现,例如初始化CAN-FD控制器、设置波特率、发送和接收CAN-FD消息等。 通过阅读STM32 CAN-FD源码,开发人员可以了解CAN-FD控制器的工作原理、寄存器的配置方法以及与其他外设的交互方式。源码中还会包含一些示例代码和应用程序,开发人员可以基于这些示例进行定制开发,满足特定的应用需求。 在使用STM32 CAN-FD源码时,开发人员需要熟悉C语言和嵌入式系统开发的基础知识。他们需要按照源码提供的文档和指南,逐步理解源码的逻辑和结构,并根据自己的需求进行修改和优化。同时,开发人员还需要具备良好的调试技巧,以便在开发过程中解决可能遇到的问题。 总之,STM32 CAN-FD源码是STMicroelectronics提供的用于控制CAN-FD控制器的软件源代码,通过阅读和理解这些源码,开发人员可以进行定制化开发,满足特定的CAN-FD应用需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值