第十四篇,STM32的CAN总线通信

      最后更新:2022-07-18 02:05:49 手机定位技术交流文章

      1.CAN巴士的概念

      CAN指的是控制器局域网网络(Controller Area Network),由德国博世汽车电子厂商开发出来。

      CAN采用差动信号,具有很强的抗干扰能力和传输稳定性

      CAN属于多域通信,网络中的所有节点都可以作为主设备进行通信

      CAN网络扩充非常方便,在CAN网络中扩充新的通信单元、旧单元和硬件,无需改变。

      CAN有很强的错误纠正能力,它可以检测传输中的错误,并分离错误节点;所有单元可以检测错误;检测错误的单元将立即通知其他单元同时;一旦错误被检测,发送消息的单元,迫使当前发送结束。被迫终止的单元会再次发送消息,直到它被成功发送为止。

      2.CAN微分信号

      调制信号使用电平面的绝对值来表示逻辑上的差异。

      差分信号使用两个电平的差值来表示逻辑值。CAN传输使用两根数据线 ------------- CANH和CANL

      CAN巴士高速ISO11898标准:

      如果CANH(3.5V)和CANL(1.5V = 2V的电压差,此时代表逻辑0,称为可视电场;

      如果CANH(2.5V)和CANL(2.5V)的电压差=0V,此时代表逻辑1,称为隐电解

      //如果多个节点同时控制总线电压,总线仲裁的最终显示是可视电压(0)

      3.CAN通信协议

      CAN使用了五个通信帧,下面以数据帧为例

      数据帧的分析:

      数据帧分为两个格式:标准数据帧和扩展数据帧。

      D --表示明显的电解体水平

      R --代表无形电平面

      数据框架由七部分组成:

      数据框架的七部分的实施

      在标准格式中,标识符(ID)为11位,由ID28发送到ID18以顺序的方式,并且禁止隐藏7位(禁止设置:ID = 11 11X XX);

      扩展格式ID为29位元,基本ID由ID28到ID18,扩展ID由ID17到ID0表示,高7位元被禁止隐藏(禁止设置:ID = 11 11X XX)。
      RTR bit用于识别是否是一个远程帧(0:数据帧;1:远程帧);

      識別子選擇IDE bit (0:使用標準識別子; 1:使用擴展識別子);

      SRR位元替换了远程帧请求位元,而隐式位元替换了标准帧中的RTR位元。

      (1)帧起始

      显示1位显性电平

      (2)仲裁段

      实现帧优先级和帧过滤

      1.标准帧

      标准数据帧的仲裁部分由11位ID和1位RTR位组成,用于区分数据帧(例如光栅)和远程帧

      2.扩展帧

      扩展数据框架包括29位ID、1位RTR、1位SRR和1位IDE;

      RTR用于区分数据帧(例如光栅)和远程控制帧

      由于SRR是一个隐形电子平面,而同一ID的标准帧优先级高于扩展帧,所以SRR被用来代替标准帧的RTR位置

      IDE用于区分标准帧(例如,清晰跨度)和扩展帧;清晰跨度代表标准帧;隐含跨度代表扩展帧

      消息的优先次序由总线通过ID仲裁确定。当总线同时显示光学信号时,静态信号被显示为光学信号。当多个节点同时争夺总线的功率时,第一个显示光学信号的总线将失去总线的功率并成为接收器

      (3)控制段

      数据节的表数据框架中的字节数,r0,r1是保留的,默认是可见的电平面;

      4位DLC显示数据段的长度(0~8)

      (4)数据段

      用户需要发送的数据内容,可一次性发送0–8个字节的数据(每个数据占用一个字节)

      长度0~8字节,高级输出

      (5)CRC段

      CRC错误校验,由15位CRC校验码和1位CRC界定符组成, 校验出了错误信息,可利用错误帧请求重发,重发次数可设定;用于检查帧传输错误(检查范围:起始端,仲裁段,控制段,数据段)。

      (6)ACK段

      它由单个ACK槽和单个ACK标识符组成。发送者的ACK槽是一个隐式电板。接收者承认正确的数据,并以明确的电板响应。

      (7)帧结束

      7位隐形电平,由7个隐形位(逻辑1)组成,因此ID仲裁断禁止出现1111111****形式的格式

      4.CAN的位时序

      CAN传输1位由4个阶段组成:同步阶段、传输阶段、相缓冲阶段1、相缓冲阶段2;

      在1位元后,补偿采用重新同步补偿宽度(SJW)进行,设计的目的是为了保持发送者和接收者的时间序列一致(排除错误)

      (1)同步阶段(SS)

      同步阶段用于实现实时训练的调整和完成可视/不可视继电器的转换,即在该点准备传输的继电器

      (二)传输期(PTS)

      为了吸收网络上的物理延迟,物理延迟包括发送、接收和传输信号的延迟。

      (3)相缓冲器(PBS)

      电镀转换的未包含部分的补偿,并同时对单位的时钟误差的SJW补偿,电镀的读取在本节中完成。

      (4)重同步补偿宽度(SJW)

      补偿前面同步的误差

      接收器的采样必须在PBS1和PBS2之间,由于SS和PTS错误的变化,PBS补偿也会随着错误的变化而改变,达到固定传输时间,而SJW则为PBS补偿进行二次补偿。

      1位时间 = 8 ~ 25Tq, SS = 1Tq ,PTS = 1 ~ 8Tq ,PBS = 2 ~ 8Tq ,SKW = 1 ~ 4Tq

      5.CAN控制器 stm32f407

      stm32芯片与bxCAN控制器,支持CAN协议2.0A和2.0B,最高速1Mbps,可以自动发送CAN消息,支持标准和扩展数据框架,控制器装有三个邮箱存储发送消息,还有两个FIFO,支持ID过滤,可以配置自动重复等。

      (1)工作模式

      初始化模式:初始化CAN控制器

      正常模式:正常接收和发送数据

      睡眠模式:低功耗

      (2)测试模式

      沉默模式:停止发送外部消息

      循环返回模式:消息不发送到主行,而是直接发送到你自己

      环回和静默组合模式

      测试模式

      (3)传输速率

      端口速率=42MHz/频率系数/(tbs1+tbs2+sjw)

      (4)接收中断

      FMPx表示收到消息

      6.原理图

      查看原理图可知

      CAN的简要接口最终连接到CPU的PD0和PD1,并具有CAN的可重用功能。

      7.CAN总线通信的图书馆功能实现

      增加CAN通信到库函数源

      (1)开启时钟

      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);

      (二)配置GPIO为CAN撤销函数

      GPIO_Init(...); GPIO_PinAFConfig(...);

      (3)初始化CAN

      (4)初始化过滤器

      (5)配置发送/接收结构

      (六)CAN启动接收中断

      NVIC_Init(...); CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);

      (7)发送和接收数据

      接收:空缺CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage);

      发送:

      uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage);     uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox);

      8.上位机的使用

      打开软件

      (1)串口设置

      当前模块的配置将在打开后被读取

      (二)将CAN模块设置为500Kbps回拨模式

      (四)发送和接收测试模块

      9.连接模块和开发板

      下一个步骤是编写一个实现CAN总线通信的程序,如果罐头模块没有测试,您可以在启动罐头时将模式设置为循环返回模式,并发送数据给自己进行数据接收测试。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29953.html

          热门文章

          文章分类