CAN通信单片机编程——最快入手方法

为了您的学习更有效率,别再做无头苍蝇,虽然没有捷径但有前人的学习经验可以借鉴

如果您使用的单片机不带CAN总线,那么本篇文章对您不适用(编程环境是Keil5)

使用stm32系列单片机开发CAN的朋友们和以下内容契合度更高

第一步:简单的了解CAN

(如果在真正初次使用CAN前就把它很深入地剖解,那你是真的闲。建议编程的时候才深剖)

①CAN是一种通信协议(举例485,422,232,IIC,SPI它们也是一种通信协议),它就像各种单片机的uart口一样是存在于单片机内部的一个设备(也叫单片机的外设)

由于CAN比较高级,它只存在一些较高级的单片机中(叫做CAN总线),一些低端单片机需要接CAN控制器及电平转换器才能使用CAN通信。有自带CAN总线的单片机控制CAN通信实际上也是操作单片机内部的寄存器来实现。

②电路设计:

 

③数据传输协议:

 

CAN 控制器根据CAN_L和CAN_H上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。

显性电平对应逻辑:0

CAN_H和CAN_L之差为2V左右。

隐性电平对应逻辑:1

CAN_H和CAN_L之差为0V。

④对初学者第一步,知道以上内容就够了!接下来直接打开Keil5建立编程环境,再打开相关CAN数据手册(开发手册),按照第二步(下面的步骤),边写程序边找手册上的资料。

 

第二步:带上CAN数据手册,编程走起!

①根据自己使用的单片机,在该单片机的芯片开发手册/参考手册上找出所有带CAN标题的书签,定位好资料位置。然后打开编程环境,建立工程,把单片机的底层代码文件包含进来

②封装CAN初始化函数(这个基本不用解释为什么,大多数外设运用都要初始化唤醒功能)

  1. 初始化硬件需求的单片机引脚(不同单片机对引脚初始化有不同的规则有些低端的8位单片机甚至不需要引脚初始化),使能相关的时钟信号(可能包括系统时钟、引脚时钟、外设CAN的时钟,也是根据自己用的单片机型号而定)
  2. 按要求配置位时序寄存器CAN_BTR(关于工作模式、波特率设置)
  3. 按要求配置主状态寄存器CAN_MCR(设置通信相关控制位)

 

③按需求配置筛选器(鄙人认为是为了保证数据的正确率相当于滤波器保证信号稳定)

1、配置主筛选器寄存器CAN_FMR(设置FINIT为1筛选器进入初始化模式)

2、配置筛选器激活寄存器CAN_FA1R,激活其中一个筛选器。

3、配置筛选器尺度寄存器CAN_FS1R,设置筛选尺度。

4、配置筛选器模式寄存器CAN_FM1R,设置筛选器工作模式,有如下四种

 

5、配置筛选器FIFO分配寄存器CN_FFA1R(设置通过筛选器的数据存储到哪个FIFO存储器),注意每个筛选器的在寄存器设置位不一样,如FFA1位,设置的是筛选器1。

6、配置主筛选器寄存器CAN_FMR(设置FINIT为0筛选器结束初始化模式)

④如果需要CAN收发中断,则要配置中断使能寄存器CAN_IER。并写中断服务函数。对应地,也要根据单片机的不同做相应的单片机中断初始化。

⑤封装发送数据函数

是以数据帧的格式发送一串n多位的二进制数来达到发送0-8个字节数据的目的。

数据帧又分为几个部分如下

1)帧起始。表示数据帧开始的段。

2)仲裁段。表示该帧优先级的段。

3)控制段。表示数据的字节数及保留位的段。

4)数据段。数据的内容,一帧可发送0~8个字节的数据。

5)CRC段。检查帧的传输错误的段。

6)ACK段。表示确认正常接收的段。

7)帧结束。表示数据帧结束的段。

 

数据帧分为标准格式拓展格式两种区别如下图:

 

那么发送数据的数据内容和格式我们知道了,下面就是发送方法了

首先数据帧的数据都是在对应的寄存器里的,我们查手册可以知道,然后以下步骤

  1. 检查发送状态寄存器CAN_TSR相应位看看有没有空数据的邮箱(有三个缓存数据的 邮箱)
  2. 判断数据帧中的IDE看看是不是拓展格式,然后根据情况发送对应数据到CAN发送 FIFO邮箱标识符寄存器(CAN_TIxR)(x=0/1),再配置CAN发送FIFO邮箱数据长度和时 间戳寄存器(CAN_TDTxR) (x=0/1)记录数据长度字节大小等,再用对应算法把数据帧的数 据段的数据传到CAN发送邮箱数据寄存器(CAN_TDLxR/CAN_TDHxR) (x=0~2),最后邮箱 标识符寄存器(CAN_TIxR)的TXRQ置1表示请求发送数据
  3. 检查发送状态寄存器CAN_TSR相应位,等待发送成功。

 

⑥封装接收数据

同样是操作相关寄存器,如下顺序

  1. 检查FIFO x CAN寄存器CAN_RFxR(x=0/1),读取相应状态,看看是否有数据接收
  2. 判断数据帧中的IDE看看是不是拓展格式,然后根据情况发送对应数据到CAN接收 FIFO邮箱标识符寄存器(CAN_RIxR)(x=0/1) ,和发送差不多,同样要配置再配置CAN 接收FIFO邮箱数据长度和时 间戳寄存器(CAN_RDTxR) (x=0/1)记录数据长度字节大 小等,再用对应算法把数据帧的数 据段的数据传到CAN发送邮箱数据寄存器 (CAN_RDLxR/CAN_RDHxR) (x=0~2)。
  3. 把CAN接收FIFO寄存器(CAN_RF0R/CAN_RF1R)的RFOM0/RFOM1位置1,表示释 放指定的FIFO的输出邮箱,如果三个邮箱都有数据无法读下一条数据。
    1. 本博客笔记视频记录在本人b站空间https://www.bilibili.com/video/av61852069

 

### 回答1: CAN通信是一种用于实现微控制器之间的高速数据传输的通信协议。51单片机(也称为STC单片机)可以通过CAN总线与其他设备进行通信。CAN总线是一种双线制的通信系统,由CAN发送器和CAN接收器组成。 在CAN通信中,可以使用标准帧和扩展帧进行数据传输。标准帧用于传输11位的标识符,扩展帧可以传输29位的标识符,这使得CAN通信可以支持更多的设备和更大的数据量。 为了在51单片机中实现CAN通信,首先需要连接CAN收发器和CAN控制器。然后,程序员需要编写代码来控制CAN收发器和CAN控制器之间的数据传输。这包括设置CAN收发器的通信速率、初始化CAN控制器的寄存器以及配置CAN消息的发送和接收。 一旦CAN通信的硬件和软件设置完成,51单片机可以发送和接收CAN消息。发送CAN消息时,程序员需要设置消息的标识符、数据长度以及数据内容。接收CAN消息时,程序员需要检查CAN接收缓冲区,以判断是否有新的CAN消息到达,并读取相应的数据。 通过CAN通信,51单片机可以实现与其他设备的实时数据交换。这对于控制系统、汽车电子以及工业自动化等应用非常有用。CAN通信具有高可靠性、高带宽以及抗干扰能力强的特点,使得51单片机成为许多应用中的理想选择。 ### 回答2: 51单片机CAN通信是指使用51单片机通过CAN总线与其他设备进行通信的一种方式。CAN(Controller Area Network,控制器局域网络)是一种快速、可靠的串行总线通信协议,广泛应用于汽车电子、工业自动化等领域。 51单片机CAN通信主要包括以下几个方面的内容: 1. CAN总线:CAN总线是一种双线制的串行通信总线,其中包含CAN_H和CAN_L两个信号线。CAN总线具有抗干扰能力强、传输速率高、可靠性好等特点,因此在工业控制领域得到广泛应用。 2. 51单片机:51单片机是一款常用的低成本、低功耗的单片机,具备对CAN通信的支持。它可以通过CAN收发器与CAN总线相连接,实现与其他CAN设备的通信。 3. CAN控制器:51单片机通过内部的CAN控制器与CAN总线连接。CAN控制器负责处理接收和发送CAN数据帧,控制数据的传输和接收。 4. 编程:对于51单片机CAN通信,需要通过编程来实现。通过设置CAN控制寄存器和CAN速率寄存器,配置CAN通信参数,如波特率、滤波器等。然后通过发送和接收函数,实现与其他设备之间的数据交换。 5. 通信协议:CAN通信协议是指在CAN总线上进行数据交换时所采用的一种规范。它定义了数据帧的格式、报文的优先级、错误检测和纠正等。根据具体应用需求,可以选择使用标准CAN协议(CAN 2.0A/B)或扩展CAN协议(CAN FD) 综上所述,51单片机CAN通信是一种使用51单片机与其他设备进行串行通信方法。通过使用CAN总线、CAN控制器和编程配置,可以实现与其他设备之间的数据交换。这种通信方式在工业控制、汽车电子等领域具有广泛的应用前景。 ### 回答3: 51单片机CAN通信是指使用51单片机来实现CAN总线通信。 CAN(Controller Area Network)是一种广泛应用于汽车、工业控制等领域的串行通信协议。CAN总线具有高可靠性、高实时性和高容错性的特点,能够在复杂的电磁环境中稳定传输数据。 在51单片机中,可以通过使用外部的CAN控制器芯片来实现CAN通信。通过与CAN控制器芯片的连接,51单片机可以实现CAN通信的发送和接收功能。 要实现CAN通信,首先需要初始化CAN控制器芯片,在51单片机中设置CAN通信的波特率、报文格式等参数。然后可以使用相应的函数来发送和接收CAN数据。 在发送数据时,可以将要发送的数据封装成CAN数据帧,并通过相应的函数将数据发送到CAN总线上。在接收数据时,可以通过循环读取CAN控制器接收到的数据,并进行相应的处理。 通过51单片机实现CAN通信可以应用于许多领域,比如汽车电子系统中的ECU(Engine Control Unit)通信、工业自动化中的设备联网等。 总之,51单片机可以通过与CAN控制器芯片的连接来实现CAN总线通信,通过相应的函数和设置参数,可以实现CAN数据的发送和接收,为各个领域的应用提供了稳定可靠的通信手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值