怎样用STM32CAN总线接口发送和接收数据

2019-11-16来源: eefocus关键字:STM32CAN  总线接口  发送  接收数据

CAN协议基础知识


I2C.SPI总线多用于短距离传输,协议简单,数据量少,主要用于IC之间的通讯,而 CAN 总线则不同,CAN(Controller Area Network) 总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议。与I2C、SPI有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。


CAN物理层的形式主要分为闭环总线及开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个

“120欧”的电阻。来做阻抗匹配,以减少回波反射。


闭环总线网络

CAN开环总线网络是遵循ISO11519-2标准的低速、远距离网络,它的最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻


开环总线网络

CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于CAN通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载。


CAN通讯节点由一个CAN控制器及CAN收发器组成,控制器与收发器之间通过CAN_Tx及CAN_Rx信号线相连,收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。其中CAN_Tx及CAN_Rx使用普通的类似TTL逻辑信号,而CAN_High及CAN_Low是一对差分信号线,使用比较特别的差分信号。当CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线CAN_High和CAN_Low线输出到CAN总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的CAN_High及CAN_Low信号转化成普通的逻辑电平信号,通过CAN_Rx输出到控制器中。


差分信号


差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1。相对于单信号线传输的方式,使用差分信号传输具有如下优点:

• 抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而

接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。

• 能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他

们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越

少。

• 时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通

单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时

序上的误差,同时也更适合于低幅度信号的电路。

• 由于差分信号线具有这些优点,所以在USB协议、485协议、以太网协议及CAN协议的物理层中,都使用了差分信号传输。


CAN协议中的差分信号


CAN协议中对它使用的CAN_High及CAN_Low表示的差分信号做了规定。以高速CAN协议为例,当表示逻辑1时(隐性电平),CAN_High和CAN_Low线上的电压均为2.5v,即它们的电压差V H -V L =0V;而表示逻辑0时(显性电平),CAN_High的电平为3.5V,CAN_Low线的电平为1.5V,即它们的电压差为V H -V L =2V。

CAN 总线的特点


  CAN 总线网络是一种真正的多主机网络,在总线处于空闲状态时,任何一个节点单元都可以申请成为主机,向总线发送消息。其原则是:最先访问总线的节点单元可以获得总线的控制权;多个节点单元同时尝试获取总线的控制权时,将发生仲裁事件,具有高优先级的节点单元将获得总线控制权。

 

  CAN 协议中,所有的消息都以固定的数据格式打包发送。两个以上的节点单元同时发送信息时,根据节点标识符(常称为 ID,亦打包在固定的数据格式中)决定各自优先级关系,所以 ID 并非表示数据发送的目的地址,而是代表着各个节点访问总线的优先级。如此看来,CAN 总线并无类似其他总线“地址”的概念,在总线上增加节点单元时,连接在总线的其他节点单元的软硬件都不需要改变。 


  CAN 总线的通信速率和总线长度有关,在总线长度小于 40m 的场合中,数据传输速率可以达到 1Mbps,而即便总线长度上升至 1000m,数据的传输速率仍可达到 50Kbps,无论在速率还是传输距离都明显优于常见的 RS232、RS485 和 I2C 总线。 


  对于总线错误,CAN 总线有错误检测功能、错误通知功能、错误恢复功能三种应对措施,分别应对于下面三点表述:所有的单元节点都可以自动检测总线上的错误;检测出错误的节点单元会立刻将错误通知给其他节点单元;若正在发送消息的单元检测到当前总线发生错误,则立刻强制取消当前发送,并不断反复发送此消息至成功为止。 


  CAN 总线上的每个节点都可以通过判断得出,当前总线上的错误时暂时的错误(如瞬间的强干扰)还是持续的错误(如总线断裂)。当总线上发生持续错误时,引起故障的节点单元会自动脱离总线。 


  CAN 总线上的节点数量在理论上没有上限,但在实际上收到总线上的时间延时及电气负载的限制。降低最大通信速率,可以增加节点单元的连接数;反之,减少节点单元的连接数,则最大通信速率可以提高。


  CAN总线的数据通信是以数据帧的格式进行的,而数据帧又是由位场组成的,其中每一个位又被划分为四段.即SS(SYNC SEG),PTS(PROP SEG--传播时间段),PBS1(PHASE SEG1--相位缓冲段1),PBS2(PHASE SEG1--相位缓冲段2).

数据帧的结构图:

图中D表示显性电平,R表示隐形电平.


ID:高位在前,低位在后。


基本ID,禁止高7位都为隐性,即不能:ID=1111111XXXX。


RTR,远程请求位。0,数据帧;1, 远程帧;


SRR,替代远程请求位。设置为1(隐性电平);


IDE,标识符选择位。0,标准标识符;1,扩展标识符;


r0,r1:保留位。必须以显现电平发送,但是接收可以是隐性电平。


DLC:数据长度码。0~8,表示发送/接收的数据长度(字节)。


IDE,标识符选择位。0,标准标识符;1,扩展标识符;


位时序分解


为了实现位同步,CAN协议把每一个数据位的时序分解成SS段、PTS段、PBS1段、PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,而一个完整的位由8~25个Tq组成。

STM32中的CAN接口


STM32的芯片中具有bxCAN控制器 (Basic Extended CAN),它支持CAN协议2.0A和2.0B标准。该CAN控制器支持最高的通讯速率为1Mb/s;可以自动地接收和发送CAN报文,支持使用标准ID和扩展ID的报文;外设中具有3个发送邮箱,发送报文的优先级可以使用软件控制,还可以记录发送的时间;具有2个3级深度的接收FIFO,可使用过滤功能只接收或不接收某些ID号的报文;可

配置成自动重发;不支持使用DMA进行数据收发。

1. CAN控制内核

2.CAN发送邮箱

3.CAN接收FIFO

4.验收筛选器


STM32的有两组CAN控制器,其中CAN1是主设备,框图中的“存储访问控制器”是由CAN1控制的,CAN2无法直接访问存储区域,所以使用CAN2的时候必须使能CAN1外设的时钟。


STM32至少配备一个bxCAN(basic extend can )控制器,支持2.0A和2.0B协议,最高数据传输速率可达1M bps,支持11位标准帧格式和29位扩展帧格式的接收和发送,具备三个发送邮箱和两个接收FIFO,此wa此外还有三级可编程滤波器,STM32的bxCAN非常适应CAN总线网络y网络应用发展需求,其主要主要特征如下 :


支持CAN协议2.0A和2.0B主动模式


波特率最高可达1Mbps


支持时间触发通讯功能


数据发送特性:具备三个发送邮箱;发送报文的优先级可以通过软件配置,可记录发送时间的时间戳


数据接收特性:具备三级深度和两个接收FIFO;具备可变的过滤器组,具备可编程标识符列表,可配置FIFO溢出处理方式,记录接收时间的时间戳


报文管理:中断可屏蔽;邮箱单独占有一块地址空间,便于提高软件效率.


本文的实验设计将利用STM32 的bxCAN控制器的环回工作模式,实现bxCAN控制器的自收发过程,并使用串口设备跟踪监视数据收发情况.


程序流程如下图

本程序设计主要围绕bxCAN控制器的初始化初始化配置展开,其要点罗列如下:


1.初始化RCC寄存器,配置PLL输出72MHZ时钟,APB1总线频率为36MHZ,分别打开CAN,GPIO和USART1的设备时钟.


2.设置CAN的Tx引脚(即PA12)为复用推挽模式,并设置Rx引脚(即PA1)为上拉输入模式,其中三个


重要的参数如下配置


CAN_InitStructure.CAN_SJW配置为CAN_SJW_1tq;


CAN_InitStructure.CAN_BS1配置为CAN_BS1_8tq;


CAN_InitStructure.CAN_BS2配置为CAN_BS2_7tq;


3.最后分频数配置为5,配置接受接受缓冲区标识符为0x00AA0000,配置过滤器为32位屏蔽位模式,过滤器屏蔽标识符为0x00FF0000.


4.初始化USART设备


5.使用扩展帧shu帧数据格式,ID为0xAA,数据长度长度为8


STM32的CAN控制器设计的重点集中在CAN寄存器组的初始化过程中,而CAN初始化的重

[1] [2]
关键字:STM32CAN  总线接口  发送  接收数据 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic480240.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32 总线与内存分布
下一篇:HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm32常见通信方式(TTL、RS232、RS485、CAN)总结
一、TTL电平:全双工(逻辑1: 2.4V--5V   逻辑0: 0V--0.5V)1、硬件框图如下,TTL用于两个MCU间通信2、‘0’和‘1’表示二、RS-232电平:全双工(逻辑1:-15V--5V  逻辑0:+3V--+15V)1、硬件框图如下,TTL用于MCU与PC机之间通信2、‘0’和‘1’表示三、RS-485:半双工、(逻辑1:+2V--+6V  逻辑0: -6V---2V)这里的电平指AB 两线间的电压差。1、硬件框图如下2、‘0’和‘1’表示四、CAN总线:逻辑1:-1.5V--0V  逻辑0:+1.5V--+3V)这里的电平指CAN_High、CAN_Low 两
发表于 2019-10-25
stm32常见通信方式(TTL、RS232、RS485、CAN)总结
STM32F103 CAN总线配置总结
stm32的can总线的配置如下:      CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式      CAN_InitStructure.CAN_ABOM=DISABLE;      CAN_InitStructure.CAN_AWUM=DISABLE;      CAN_InitStructure.CAN_NART=DISABLE;//CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)      
发表于 2019-10-08
STM32 CAN总线调试经验
前言STM32 CAN代码网上很多,但大都是讲如何配置的,对于一些原理以及注意事项没有很清楚的说明。在实际调试过程中,两个设备间的通信只要设备CAN的配置一样基本就可以调通,但在增加设备的过程中,很容易出现多设备无法通信的问题,这里主要就这一问题进行说明。硬件STM32F042G4 + MAX3051测试过程测试板回来后,两个设备间的通信轻松搞定,但在增加设备的过程中,增加的设备总是不能正常通信。详细比对了一下配置,也没有任何问题。后来,仔细研读MAX3051的芯片手册,得到以下几个重要信息:MAX3051有四种工作模式高速模式:数据传输速率可达1Mbps,但抗干扰能力弱,需要双绞线斜率控制:可编程控制最高500kbps的传
发表于 2019-10-08
基于STM32F103RBT6 的CAN双机通讯成功案例工程下载
硬件平台:STM32F103RBT6   此程序稍作修改可以用于F103全系列。功能:双机通讯,通过USB-CAN分析仪收发即可以调试。当然,如果你手头有两块STM32的开发板或是电路板,也可以实验。使用Keil uVision 4编译即可实验。注意:我使用的电路板,里面CAN的引脚采用默认的,不是remap的,如果你的开发板或是电路板是remap的,先remap后使用。详细请参考代码。(1)烧写主机程序,上电后,会在串口打印出信息。串口设置:115200 N 8 1(2)通过CAN分析仪,连接好线,CANH与CANL,然后设置通讯的波特率。目前为1Mbps  36M/(1+2+3)/6=1Mbps
发表于 2019-10-08
基于STM32F103RBT6 的CAN双机通讯成功案例工程下载
STM32 CAN总线通信学习笔记(一)
一、CAN总线简介CAN 是控制器局域网络(Controller Area Network, CAN)的简称。CAN采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(处理or丢弃)。CAN总线具有以下特点:1. 多主控制在总线空闲时,所有的单元都可以发送消息;具有CSMA/CA机制,即最先访问总线的单元可获得发送权;多个单元同时发送消息时,优先级高的标志(ID)单元可获得发送权,其中ID并不是发送的目的地址,而是表示访问总线的消息的优先级,仲裁机制会对消息ID的每个位继续比较,仲裁为高优先级的单元可继续发送消息,仲裁失败的单元则停止发送而进行接收
发表于 2019-10-08
STM32 CAN总线通信学习笔记(一)
基于VXI总线接口电路的设计与实现
  随着现代无线通信系统的发展,移动通信、雷达、卫星通信等 通信系统对收发切换开关的开关速度、功率容量、集成性等方面有了更高的要求, 因此研究VXI总线技术,开发满足军方特殊要求的VXI总线模块,具有十分重要的意义,我们将利用虚拟仪器思想,将硬件电路以软件的方式实现,以下设计的射频开关可以由计算机直接控制,可以很方便地与VXI总线测试系统集成,最大限度的发挥计算机和微电子技术在当今测试领域中的应用,具有广阔的发展前景。  1 VXI总线接口电路的设计与实现  VXIbus是VMEbus在仪器领域的扩展,是计算机操纵的模块化自动仪器系统。它依靠有效的标准化,采用模块化的方式,实现了系列化、通用化以及VXIbus仪器 的互换性
发表于 2019-10-11
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved