STM32单片机之CAN通讯

在STM32单片机中有一类非常常用且重要的通信协议——CAN通讯技术,这篇文章就记录一下自己在学习CAN通信的收获和思考吧,供大家参考。

1.CAN通讯介绍

CAN(Controller Area Network 控制器局域网,简称CAN或者CAN bus)是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。

它基于消息传递协议,设计之初在车辆上复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。

1.1物理层

当CAN节点需要发送数据时,控制器要将发送的二进制编码通过CAN_TX先发送到收发器,收发器将这个收到的逻辑电平信号转换为成差分信号,通过差分线CAN_High、CAN_Low输出到CAN总线网络。CAN节点收数据则是完全相反的过程,在此不做赘述。

当CAN总线上连接了多个设备时,就构成了CAN总线网络。根据接入方法的不同,总线网络分为两种:闭环总线网络、开环总线网络

1.1.1闭环总线网络

1.1.2开环总线网络 

1.1.3CAN总线中的差分信号 

差分信号优缺点
优点:1.抗干扰能力强。
干扰噪声一般会等值、同时的被加载到两根信号线上,而其差值为0,即,噪声对信号的逻辑意义不产生影响。
2.能有效抑制电磁干扰(EMI)
由于两根线靠得很近目信号幅值相等,这两根线与地线之间的耦合电磁场的幅值也相等,同时他们的信号极性相反,其电磁场将相互抵消。因此对外界的电磁干扰也小。
缺点
差分信号一定要走两根等长、等宽、紧密靠近、且在同一层面的线。对电路板比较小,走线比较紧张的情况下,!给布线带来挑战。
差分信号线具有这些优点,在 USB 协议、485 协议、以太网协议及 CAN 协议的物理层中,都使用了差分信号传输。 

1.2协议层

1.2.1CAN的帧(报文)种类

CAN总线是广播类型的总线。这意味着所有节点都可以侦听到所有传输的报文。无法将报文单独发送给指定节点;所有节点都将始终捕获所有报文。但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。

CAN使用短报文 —— 最大实用负载是94位。报文中没有任何明确的地址;相反,可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址。

CAN总线上有5种不同的报文类型(或“帧”):数据帧,远程帧,错误帧,过载帧和帧间隔。

数据帧

数据帧是最常见的报文类型,用于发送单元向接收单元发送数据。有两种帧结构:标准帧和扩展帧。

​​​​​​​远程帧(遥控帧)

远程帧用于接收单元向具有相同id的发送单元请求发送数据。与数据帧相比没有数据段

 

​​​​​​​错误帧

错误帧当检测出错误时向其他单元通知错误的帧。

​​​​​​​过载帧

过载帧并不常用,因为当今的CAN控制器会非常智能化地避免使用过载帧。

​​​​​​​帧间隔

用于将数据帧及遥控帧与前面的帧分离开来的帧

其中错误帧、过载帧、帧间隔都是由硬件自动完成的,没有办法用软件来控制。对于一般使用者来说,只需要掌握数据帧与遥控帧。数据帧和遥控帧有标准格式与扩展格式。标准格式有11位标识符,扩展格式有29位标识符。

​​​​​​​1.2.2CAN总线仲裁

CAN总线处于空闲状态的时候,最先发送消息的单元获得发送权。多个单元同时开始发送时,从仲裁段(报文id)的第一位开始进行仲裁。连续输出显性电平最多的单元可以继续发送,即首先出现隐形电平的单元失去最总线的占有权变为接收。(即报文id小的优先级高)。竞争失败,会自动检测总线空闲,在第一时间再次尝试发送。

以上就是CAN通讯的基础知识了,下一章我将介绍STM32中的CAN外设,帮助大家理解。

 

### 回答1: STM32F072是一款32位微控制器,该芯片支持CAN(Controller Area Network)通信协议。下面是STM32 F072的CAN通信配置步骤: 1. 硬件连接:首先,将CAN引脚连接到外部CAN器件。在STM32F072上,CAN通信使用两个引脚,一个用于CAN_TX(发送),一个用于CAN_RX(接收)。 2. 时钟配置:为了使CAN模块正常工作,需要配置时钟。在STM32F072上,可以使用多种源为CAN模块提供时钟。根据具体的应用需求,可以选择使用内部RC振荡器或外部时钟源。 3. 初始化CAN外设:使用STM32的HAL库或CubeMX配置工具来初始化CAN模块。在初始化过程中,需要设置CAN通信的参数,如波特率、工作模式和过滤器设置等。 4. 波特率配置:根据应用需求,设置CAN通信的波特率。在STM32F072中,可以通过配置CAN_BTR寄存器来实现。 5. 帧过滤器配置:为了正确过滤和接收CAN消息,在CAN模块中配置帧过滤器。可以设置过滤器模式和掩码以满足不同的过滤需求。 6. 消息发送:使用CAN发送数据时,需要将数据写入到CAN_TX寄存器,并设置帧标识符和帧类型等参数。 7. 消息接收:使用CAN接收数据时,需要检查CAN_RX寄存器是否有新的数据可用,并读取数据和帧信息。 8. 中断处理:可以使用中断机制来处理CAN通信过程中的事件,如数据发送完成中断和数据接收中断等。 以上是STM32 F072的CAN通信配置的基本步骤。根据具体的应用需求和硬件连接方式,可能需要进行一些额外的配置和设置。 ### 回答2: STM32F072是一款具有CAN通信功能的单片机。为了完成CAN通信,需要进行以下配置。 首先,需要配置GPIO引脚,将CAN收发器与单片机的CAN引脚连接。可以选择STM32CubeMX来进行引脚和外设配置,或者使用寄存器级别的代码进行配置。 其次,需要配置CAN外设。在配置CAN外设之前,需要确保CAN时钟已经使能,并且时钟频率满足CAN通信的要求。可以通过RCC寄存器来使能CAN时钟。 然后,需要配置CAN的工作模式和波特率。可以选择CAN的工作模式,例如普通模式或环路测试模式。在普通模式下,可以选择CAN的通信波特率,其中包括常见的100kbps、250kbps、500kbps和1Mbps等。 最后,需要配置CAN的过滤器。过滤器用于过滤CAN总线上的CAN帧,只接收符合条件的帧。可以配置单个过滤器或多个过滤器,根据实际需求选择合适的过滤模式和过滤规则。 完成以上配置后,可以在代码中使用CAN外设来发送和接收CAN帧。通过配置相关寄存器,可以设置CAN帧的ID、数据长度、数据内容等。发送CAN帧后,可以通过CAN接收中断或者轮询方式来接收CAN帧。 综上所述,通过以上步骤的配置,即可完成STM32F072的CAN通信配置。 ### 回答3: STM32 F072是一种基于ARM Cortex-M0内核的微控制器,支持CAN通信功能。下面是关于STM32 F072如何进行CAN通信配置的简要步骤: 1. 配置GPIO引脚:首先,需要将CAN的TX和RX引脚分别配置为CAN模式。可以使用STM32的GPIO模块进行配置,将对应引脚配置为复用功能,并选择CAN模式。 2. 初始化CAN硬件:在代码中,需要初始化CAN控制器。可以使用STM32提供的库函数进行初始化,设置波特率、过滤器和其他相关参数。 3. 配置CAN中断:如果需要使用中断来处理CAN消息,需要配置相关中断向量和优先级。可以通过NVIC模块来配置中断。 4. 启动CAN通信:一切准备就绪后,可以启动CAN通信。通过调用相应的库函数,可以启动和停止CAN控制器,发送和接收CAN消息。 5. 处理CAN消息:在主循环中,可以使用相应的库函数检查是否有新的CAN消息到达,并进行相应的处理。 6. 错误处理:在CAN通信过程中,可能会发生错误。可以通过检查CAN的状态寄存器来检测并处理错误。 请注意,以上仅为简要概述,实际的CAN通信配置可能会有更多的细节和特定要求。在实际应用中,建议参考STM32 F072的技术手册和相关的代码示例来进行具体配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值