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

发布者:心灵舞者最新更新时间:2016-08-28 来源: eefocus关键字:PIC  16位单片  CAN  发送报文 手机看文章 扫描二维码
随时随地手机看文章
一个CAN的发送报文花费了快三天的时间,以前没有接触过CAN也没使用过DMA,因此遇上不少阻力,还好终于整出来了。
CAN的帧格式太多了不再说明。可以自己网上下载看看帧结构。这里只说一点,最长的帧是扩展数据帧。计算如下:
1sof + 29id + 1ide + 1rtr + 1srr + 2r + 4dlc + 8*8data+ 16crc + 2ack + 7eof  = 128bit
1:由于选用的单片机有一个增强型CAN也就是ECAN因此我们必须使用DMA了,原因看下图:
PIC16位单片机CAN(4)CAN发送报文详解 - zmurder - 起点的博客
 数据手册有这么一句话: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
 
关键字:PIC  16位单片  CAN  发送报文 引用地址:PIC16位单片机CAN(4)CAN发送报文详解

上一篇:PIC16位单片机CAN(5)中断
下一篇:PIC16位单片机CAN(3)串口详解(232)

推荐阅读最新更新时间:2024-03-16 15:07

CAN总线系统在现代汽车中的应用
  一、概述   现代汽车往往使用大量电子设备来控制其正常行驶。当执行一个较复杂的控制时,需要在设备之间进行大量的数据交换。当控制系统变得复杂时,交换数据的信号线连接将变得更复杂,同时费用将提高。   对于一般控制,设备间连锁可以通过串行网络完成。因此,BOSCH公司开发了CAN总线(C ontroller Area Network),并已取得国际标准化组织认证(ISO11898),其总线结构可参照I SO/OSI参考模型。同时,国际上一些大的半导体厂商也积极开发出支持CAN总线的专用芯片。通过CAN总线,传感器、控制器和执行器由串行数据线连接起来 。它不仅仅是将电缆按树形结构连接起来,其通信协议相当于ISO/OSI参考模型
[嵌入式]
单片PIC16C7X在低功耗识别抄表的应用
    摘要: 介绍一种低功耗的自动识别抄表系统。详细介绍其结构和工作原理、设计思相,并给出两种信息钮的操作方法。     关键词: 低功耗 识读器 通信座 接触型iButton1990A 感应型TK5550 目前,许多行业的抄表系统,一般都停留在手工抄写然后人工汇总的水平上。随着经济改革的深入发展,人们要求信息及时、准确、全面;显然,手工抄写不能满足经济生活的要求。本文介绍了一种用单片机控制的抄表系统,可以记录多项信息,具有低功耗、低成本、便于携带、易于操作等特点,非常适合电厂、化工厂等相关行业的抄表系统。 1 系统的总体结构及工作原理 该系统由信息讯、识读器、通信座、计算机组成。将一个包含特定标识
[工业控制]
关于STM32的bxCAN
STM32的CAN被称为bxCAN(基本扩展CAN(Basic Extended CAN)),支持CAN协议2.0A和2.0B。STM32基本型只有一个主CAN,互联型有一个主CAN和一个从CAN。 1、关于CAN_RX和CAN_TX CAN通讯由CNA控制器和CAN收发器的区别,CAN控制器出来的信号本身就是CAN_RX和CAN_TX,信号和电平转换等是由CAN收发器来实现的。可以看一下TJA1050等CAN收发器的原理图就可以看到。 2、STM32的bxCAN分为主/从 ●CAN1:是主bxCAN,它负责管理在从bxCAN和512字节的SRAM存储器之间的通信 ● CAN2:是从bxCAN,它不能直接访问SRAM存储器 ●
[单片机]
VersaLogic推出Mini PCIe接口的双通道CAN总线扩展板
VersaLogic公司通过新的“ C1”模块扩展了其工业温度范围的耐用型Mini PCIe扩展产品,新的双通道CAN总线扩展板提供了一种向任何嵌入式计算机系统添加高速CAN总线端口的方法,尤其是在恶劣环境中的系统。 CAN-FD和CAN 2.0A/B C1支持CAN-FD和高达5 Mbps的高速信令,它也向后兼容CAN 2.0 A和CAN 2.0 B,传输速率高达1 Mbps。C1支持多种CAN功能,包括消息接受过滤器和仅侦听模式。 CANopen高级协议 C1支持高级CANopen协议,该协议标准化了不同制造商的设备和应用程序之间的通信,并且是为自动化中使用的嵌入式系统开发的,从而使其可用于工业机械,国防和航空航天,医
[工业控制]
基于ARM处理器的CAN-Ethernet通信模块实现
近20 年来工业测控系统发展的趋势是:分散控制和集中管理、标准化和开放性。工业测控系统从传统的集中测量控制系统转向网络化的集散控制系统。随着现场总线技术高速发展和标准化程度不断提高,以现场总线技术为基础的开放型集散测控系统—现场总线测控系统得到了广泛的应用。同时,以太网的应用也迅速向工业测控系统渗透,在工业自动化应用中异军突起。 这种趋势的出现与计算机技术、信息技术、网络通信技术的高速发展相关。现代工业系统信息交换的需求也已经从管理层内部迅速覆盖到控制、现场设备等各个层次,连接上层网络和现场总线的通信设备成为工厂自动化系统中的关键设备之一。CAN-Ethernet通信模块,是一种直接连接以太网和CAN现场总线的设备,有效解决了控制
[网络通信]
如何通过ZWS-CAN智慧云提高自动驾驶安全性?
目前,新基建话题带来的热度还在继续,自动驾驶该如何搭上这一快车,自动驾驶又涉及到哪些核心技术,如何利用CAN智慧云提高自动驾驶安全性能?本文将对此做简要介绍。 聚焦深度转型汽车行业,我们可以将自动驾驶车当作一个“拥有人类眼睛的智能轮式机器人”可以识别周边的车辆、故障、行人等情况,并对此作出精准的行为。不难知道,自动驾驶依赖于了人工智能AI、传感器、大数据、5G等技术领域,幸运的是,自动驾驶站在这些技术的交汇处。 自动驾驶如何步入“快车道”? 自动驾驶为何会随着新基建带来的能量一起爆发,关键还是由自动驾驶的核心技术决定的。自动驾驶实际上包含了三个问题:一是我在哪儿?二是我要去哪儿?三是我要怎么去那儿?只有完美的解决这个三
[汽车电子]
如何通过ZWS-<font color='red'>CAN</font>智慧云提高自动驾驶安全性?
CAN总线活动讲座一:写在CAN总线开发板助学之前
大家好:      很感谢cepark以及wangjin给我们这个舞台来共同学习CAN总线。如今的电子技术日新月异,技术种类和方案层出不穷,需要电子工程师掌握的东西越来越多,你是否有点迷惑呢?在我们的“演出”正式开始之前,我想带大家简要回顾或是总结一下现在的这个领域。      电子这个领域其实很广阔,涉及的东西很多,而且我自己的能力也有限,不可能一言盖尽,所以就凭自己的粗浅认识来谈一谈,欢迎大家讨论。仅从应用角度讲,电子偏工程,所以诸如电子系、自动控制、测控、导航、机械等与电子密切相关的专业最后都被授予工学学位,与理学学位不一样。这就表示着这一大类学生的培养目标是直接面对社会工程应用领域,所以学习的课程很多也都是重工程,比如数电,
[嵌入式]
HMI_Board_LVGL基于开发板自带CAN显示车速和发动机转速
1.应用背景 汽车仪表是汽车上显示行车信息必不可少的电子设备,用于显示汽车行驶过程中的一些实时信息,比如车速,发动机转速,转向灯等等,这些信息通常都是通过车身CAN总线进行传输的,而HMI Board开发板又正好具备CAN收发的能力,可通过此开发板接收车身的CAN信息解析后通过LVGL显示相关的信息。 2.实现功能 本设备实现了CAN的接收,解析出信息后通过LVGL显示在自带的屏幕上。 3.RT-Thread使用情况 本方案使用了RT-Thread操作系统,LVGL功能组件,CAN外设功能。 4.硬件架构 使用HMI Board自带的CAN功能接收车身CAN信息,以USB转CAN工具模拟发送CAN数据进行软件调试 5.软件设计 使
[嵌入式]
HMI_Board_LVGL基于开发板自带<font color='red'>CAN</font>显示车速和发动机转速
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved