CAN学习笔记..docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
笔记一:CAN传输的假想 在学习笔记第一本中,最后一个个人秀,利用了两个CAN节点建立了简单的CAN通讯,这回就强化一下CAN节点与节点之间通讯的概念。 传送这词在人们的脑海里就好想邮差送信的概念,邮差将一封封的信件逐个送到每一户目的地址,不过在CAN总线里通讯的节点们比起邮差的概念,“广播”的概念更贴切,广播有如电视台将节目广播开来,谁家只要搭起天线选择适合的频道就能接收到节目。CAN总线的传输就是这么一回事。 换另一句话说:某个节点(假设节点1),发送报文在总线上,这时报文以广播的方式在总线上传输,如果当中两个点(假设节点2与3),他们拥有与报文标示符一样的接受代码的话,那么经过验收滤波动作,报文就会被接入它们RXFIFO当中。 当然还有一点要项必须注意,报文发送时必须先申请发送请求 ,然后报文才会发在总线上。这个概念很重要必须稳固在脑海中。 笔记二:自检模式 估计刚开始接触CAN的第一个实验就是PIAE的CAN自检测试,说老实话刚开始的时候我真的不明白自检模式到底时什么一回事,但是经过几个小时的测试后,终于得出结论,好了立马进入这篇笔记的主题吧。回顾一下我们的好朋友模式寄存器,在MODR(模式寄存器)中的第三位也就MOD.2 ? 它设置了节点的自检模式,自检模式说白了就是测试模式节点用来测试自己。在图表中包含了一条信息,“using self reception request command”,这才是最关键,如果在报文发送的时候忘了给命令寄存器设置“自接收请求-self reception request”,自检模式时无法完成的。(我就是遗漏了这条信息,苦了自己瞎搞那么久,哈哈)。 在自检模式中,节点包含了几个特性: (一)可以孤独的一个节点在工作 (二)必须使用自接收请求命令发送报文 (三)验收滤波动作无视,也就是说无视ACR,AMR的设置 (四)报文标示符无视 (五)节点依然参与总线 概念图如以上图标的感觉(图凑合看就好了!呵呵),话多无用,还是开始编写程式。 笔记三:自检模式 实验 试验内容: 每一次点击外部中断键,点击的数量作为报文数据发送,而报文的接收则是节点本身发出的报文。第一到第二个数码管显示发送报文的数据(也就是点击次数),第三到四个数码管显示接收的数据(依然时点击次数,不过是以接收的方式得到数据)。 这个实验借签了PIAE的原实验观念(感谢PIAE),和以“个人秀零七:编写简单的点对点SJA1000驱动函数”作为源码作为基础。虽然说是由“个人秀零七”中的源代码作为基础,但是稍微的将 CAN_RXD( ); CAN_TXD( );Init_CAN( );和一些变量,作为另一个名为can.H的个体文件,这是为了以后编程更方便。 =============================================================== =============================================================== 在这里主要是针对两点要点进行了修改,它们就是节点初始化函数Init_CAN();和节点发送函数CAN_TXD();把么我们来看看Init_CAN()和CAN_TXD到底做了什么修改? 把焦点焦距在初始化函数上Init_CAN();如果回忆了介绍初始化函数那章个人秀就会发现到,一旦进入初始化函数,会先进入复位模式-单滤波模式,然后针对波特率,ACR,AMR,CLKOUT等等进行初始化,在初始化函数结束之间,会退出复位模式,再者设定下一个工作模式。如以下代码所示: void Init_CAN(void) { ...... ...... /* do { MODR=0x08; temp=MODR; //模式寄存器-推出复位模式,保持单验收滤波模式 } while(temp0x01); //判断...*/ do { MODR = 0x04; temp = MODR; }while(!(temp0x04)); //确保进入自检模式 我把原先那段“设置工作模式为单验收滤波”代码注释掉了,那么在下面的就是设置进入自检测的代码, MODR赋值0x04,亦即将STM置一(Self Test Mode)。 接下来的主角就是节点发送函数CAN_RXD();在节点发送函数体中。当完成对TXFIFO赋值以后,我们不是要针对命令寄存器设置报文发送请求吗?如以下代码所示: void CAN_RXD() { ...... ...... TBSR7=TXD_Buffer[7]; TBSR8=TXD_Buffer[8]; TBSR9=TXD_Buffer[9]; TBSR10=TXD_Buffer[10]; TBSR11=T

文档评论(0)

dbtx + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档