当前位置:首页 > 单片机 > 单片机
[导读]1、 帧类型(1) 数据帧:数据帧将数据从发送器传输到接收器(2) 远程帧:总线单元发出远程帧,请求发送具有同一标识符的数据帧。/ MSGDRn4。(3) 错误帧:任何单元检测到总线错误就发出错误帧(4) 过载帧:过载帧

1、 帧类型

(1) 数据帧:数据帧将数据从发送器传输到接收器

(2) 远程帧:总线单元发出远程帧,请求发送具有同一标识符的数据帧。/ MSGDRn4。

(3) 错误帧:任何单元检测到总线错误就发出错误帧

(4) 过载帧:过载帧用于在先行和后续数据帧(或远程帧)之间提供一附加的延时。

数据帧和远程帧即可使用标准帧,也可使用扩展帧。

2、 帧格式介绍

1 数据帧

数据帧由7个不同的位场组成,即帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结束。

2 远程帧

远程帧由6个不同的位场组成,即帧起始、仲裁场、控制场、CRC场、应答场、帧结束。

3 错误帧

错误帧由两个不同的场组成。第一个场是错误标志,用做为不同站提供错误标志的叠加;第二个场是错误界定符。

4 超载帧

超载帧包括两个位场:超载标志和超载界定符。

3、 报文路由:报文的内容由识别符命名。识别符不指出报文的目的地,但解释数据的含义。因此,网络上所有的节点可以通过报文滤波确定是否应对该数据做出反应。

4、 不同的系统,CAN 的速度不同。可是,在一给定的系统里,位速率是唯一的,并且是固定的。

5、 该模块分为两个节点,NODE A和NODE B,32个对象可以通过MSGCFGHn.NODE位来分别选择将该对象分配到哪个节点。

6、 该32个报文对象只能作为接受对象或发送对象,不能在接收和发送之间转换。作为接收对象的必须在初始化的时候首先将其配置成接收对象。

7、 回环模式可方便的用于调试,ABTR.LBM = 1和BBTR.LBM = 1,使能回环模式。在回环模式下,属于节点A的对象发送的报文只能由属于节点B的对象接受,反之亦如此。

8、 报文接收时可对所接收的报文进行验收滤波,称为报文标识符验收滤波。它们分别通过仲裁寄存器(MSGARHn,MSGARLn)(ID)和验收屏蔽寄存器(MSGAMRHn,MSGAMRLn)设置实现。具体过程如下:

9、 几个结构体的说明:

(1) 该寄存器用于软件编程,说明如下

typedef struct

{

uword ; // 消息配置寄存器

ulong ulID; // 扩展标识 (29-bit)

ulong ulMask; // 标准验收屏蔽(11-bit)/扩展验收屏蔽 (29-bit)

ubyte ubData[8]; // 八个字节数据

uword uwCounter; // 当前接收对象接收到数据的帧数CAN_BFCRL或//CAN_AFCRL

}TCAN_SWObj;

uwMsgCfg一般用到低字节,各位代表的意义如下:

7 6 5 4 3 2 1 0

|-----------------------------------------------------------------------|

| DLC | DIR | XTD | NODE | RMM |

|------------------------------------------------------------------------|

(2) 每个CAN对象寄存器结构体

struct stCanObj

{

ubyte ubData[8]; // Message Data 0..7

ulong ulCANAR; // Arbitration Register

ulong ulCANAMR; // Acceptance Mask Register

uword uwMSGCTR; // Message Control Register

uword uwCounter; // Frame Counter

uword uwMSGCFG; // Message Configuration Register

uword uwINP; // Interrupt Node Pointer

uword uwCANFCR; // FIFO / Gateway Control Register

uword uwCANPTR; // FIFO Pointer

ulong ulReserved; // Reserved

};

10、 几个重要寄存器的意义:

n.RXIE报文对象接收中断使能(=10)

.TXIE----报文对象发送中断使能(=10)

(3) MSGCTRHn.MSGVAL---报文对象有效(=10)

(4) MSGCTRHn.NEWDAT---报文对象中数据已更新(=10)

(5) MSGCTRHn.MSGLST---NEWDAT仍然置位,CAN控制器已将报文保存到该报文对象中,而先前的报文丢失(=10),仅用于接受

(6) MSGCTRHn.CPUUPD---报文对象自动发送被禁止(=10);可由CAN控制器自动发送报文对象中的数据(=01)

(7) MSGCTRHn.TXRQ---CPU或远程帧请求的报文对象数据发送被挂起(=10)。报文成功发送后,TXRQ自动复位;如果存在几个有效的报文对象又挂起的发送请求,报文编号最低的报文对象将被首先发送

(8) MSGCTRHn.RMTPND---远程节点请求报文对象数据发送,但数据并未发送。当RMTPND被置位时,CAN节点控制器也置位TXRQ.

.RMM---该发送报文对象的远程监控模式被使能。带匹配标识符远程帧的标识符和DLC码被复制到发送报文对象中,以监控输入的远程帧。该位仅对发送报文有效,对接受报文无影响。

(2) MSGCFGHn.NODE---报文对象CAN节点选择,0=A,1=B

(3) MSGCFGHn.XTD-----报文对象扩展标识符,1=11位,0=29位

(4) MSGCFGHn.DIR------报文对象方向控制,0=定义该报文为发送对象,1=定义该报文为接受对象

(5) MSGCFGHn.DLC-----报文对象数据长度码

(6) MSGCFGHn.RXINP/TXINP---分别为接收/发送中断节点指针,0~7

11、 发送后一定要判断TXOK时候置位,确保在发送下一组数据之前将数据发送完成

12、 附程序:

H

#ifndef _CAN_H_

#define _CAN_H_

// The following data type serves as a software message object. Each access to

// a hardware message object has to be made by forward a pointer to a software

// message object (TCAN_SWObj). The data type has the following fields:

//

// uwMsgCfg:

// this byte has the same structure as the message configuration register of a

// hardware message object. It contains the "Data Lenght Code" (DLC), the

// "Extended Identifier" (XTD), the "Message Direction" (DIR), the "Node

// Select" and the "Remote Monitoring Mode".

//

//

// 7 6 5 4 3 2 1 0

// |------------------------------------------------|

// | DLC | DIR | XTD | NODE | RMM |

// |------------------------------------------------|

//

// ulID:

// this field is four bytes long and contains either the 11-bit identifier

// or the 29-bit identifier

//

// ulMask:

// this field is four bytes long and contains either the 11-bit mask

// or the 29-bit mask

//

// ubData[8]:

// 8 bytes containing the data of a frame

//

// uwCounter:

// this field is two bytes long and contains the counter value

//

typedef struct

{

uword uwMsgCfg; // Message Configuration Register

ulong ulID; // standard (11-bit)/extended (29-bit) identifier

ulong ulMask; // standard (11-bit)/extended (29-bit) mask

ubyte ubData[8]; // 8-bit Data Bytes

uword uwCounter; // Frame Counter

}TCAN_SWObj;

void CAN_vInit(void);

void CAN_vGetMsgObj(ubyte ubObjNr, TCAN_SWObj *pstObj);

ubyte CAN_ubRequestMsgObj(ubyte ubObjNr);

ubyte CAN_ubNewData(ubyte ubObjNr);

void CAN_vTransmit(ubyte ubObjNr);

void CAN_vConfigMsgObj(ubyte ubObjNr, TCAN_SWObj *pstObj);

void CAN_vLoadData(ubyte ubObjNr, ubyte *pubData);

ubyte CAN_ubMsgLost(ubyte ubObjNr);

ubyte CAN_ubDelMsgObj(ubyte ubObjNr);

void CAN_vReleaseObj(ubyte ubObjNr);

void CAN_vSetMSGVAL(ubyte ubObjNr);

// USER CODE BEGIN (CAN_Header,8)

//发送一帧数据

void CAN_vSend1Frame(unsigned char ObjNr, unsigned char XTD, unsigned long ID, unsigned char *DataBuf, unsigned char LEN);

//发送N个字节

void CAN_vSendDataN(unsigned char ObjNr, unsigned char XTD, unsigned long ID, unsigned char *DataBuf, unsigned char LEN);

//报文对象初始化

TCAN_SWObj Init_vSWObj(TCAN_SWObj pstObj);

//接收报文函数

void CAN_vReveiveMsgObj(ubyte ubObjNr, TCAN_SWObj pstObj);

// USER CODE END

#define CAN_SRN0INT 0x54

#endif // ifndef _CAN_H_

(2) CAN.C


#include "MAIN.H"


extern unsigned char data2[8] ;
extern unsigned char j;
extern unsigned int num;
unsigned char dataa[8] = {0x0a,0x1a,0x2a,0x3a,0x4a,0x5a,0x6a,0x7a};

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭