- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)