您的位置 首页 IC

PIC16位单片机CAN(4)CAN发送报文详解

一个CAN的发送报文花费了快三天的时间,以前没有接触过CAN也没使用过DMA,因此遇上不少阻力,还好终于整出来了。CAN的帧格式太多了不再说明…

一个CAN发送报文花费了快三天的时刻,曾经没有触摸过CAN也没运用过DMA,因而遇上不少阻力,还好总算整出来了。

CAN的帧格局太多了不再阐明。能够自己网上下载看看帧结构。这儿只说一点,最长的帧是扩展数据帧。核算如下:
1sof + 29id + 1ide + 1rtr + 1srr + 2r + 4dlc + 8*8data+ 16crc + 2ack + 7eof =128bit
1:因为选用的单片机有一个增强型CAN也便是ECAN因而咱们有必要运用DMA了,原因看下图:
数据手册有这么一句话:ECAN 报文缓冲区坐落器材 RAM 中。它们不是 ECAN SFR。用户应用程序有必要直接写入为 ECAN报文缓冲区装备的器材 RAM 区。缓冲区的方位和巨细由用户应用程序界说。
因而咱们有必要看看DMA是怎么回事了。在许多的DMA装备中莫过于“存储器地址初始化”最让人纠结了。这东西还的可能看编译器的指令。。。。东西太多实在是不能一一列举了。咱们只看看DMA缓冲区方位和巨细的装备吧,下面的声明写在main函数之前就行。其间的句子都是什么意思这得看编译器了。这儿的大约意思便是设置缓冲区的巨细和对其方法!
__eds__ ECAN1MSGBUF ecan1msgBuf __attribute__((eds,aligned(ECAN1_MSG_BUF_LENGTH*16)));
其间ECAN1MSGBUF是自己界说的类型 是unsigned int [32][8] 也便是32个缓冲区,每个缓冲区巨细是8字。
咱们依据寄存器设置把缓冲区0(巨细是8个字)设置为发送缓冲区,那么便是ecan1msgBuf[0][0]到ecan1msgBuf[0][7]便是发送缓冲区了。把恳求发送的标志位至1就能够发送了。
下面的代码是在DMA装备中写的,效果便是设置DMA缓冲区的方位。
DMA0STAL = __builtin_edsoffset(ecan1msgBuf);
DMA0STAH = 0x0000;
2:DMA还有许多设置,比较简单就不再说了。下面看看CAN的一些注意事项:
CAN的数据帧分为规范格局和扩展格局,尽管咱们发送的是规范格局,可是咱们仍是得写上EID。什么意思呢?看看下面的代码
ecan1msgBuf[buf][0] = word0; //SID<10:0>+RTR+IDE 11+1+1=13位
ecan1msgBuf[buf][1] = word1;//EID<17:6>
ecan1msgBuf[buf][2] = ((ecan1msgBuf[buf][2] & 0xFFF0) + dataLength) ;//EID<5:0>+RTR+RB1+RB0+DLC 6+1+1+1+4
不管是不是扩展格局都有必要发送上面的值 3个字 仅仅数据不同罢了。如果是规范格局那么
ecan1msgBuf[buf][0]便是SID<10:0>+RTR(0)+IDE(0) 如FFFC SID是0b1111 1111 111
ecan1msgBuf[buf][1]便是EID<17:6> 0b0000 0000 0000
ecan1msgBuf[buf][2]便是EID<5:0>0b0000 00 +RTR 0b0+RB1 0b0+RB0 0b0+DLC 0b1000(数据长度8字节)
ecan1msgBuf[buf][3] = data1;//真实的数据段data1=0x1111 16位
ecan1msgBuf[buf][4] = data2;//data2=0x2222 16位
ecan1msgBuf[buf][5] = data3;//data3=0x3333 16位
ecan1msgBuf[buf][6] = data4;//data4=0x4444 16位 共64位 8个字节!!!!CAN的数据段最多8字节
代码太多就不上传了,寄存器的装备也不难。不知道的能够看看官方的例程。例程能够再单片机的阐明页下载也能够在代码示例中找附近的单片机示例代码。
示例代码下载页面链接:http://www.microchip.com/TechDoc.aspx?type=CodeExamples

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/272432.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部