前言:手把手教你学CAN总线学习笔记算是CAN编程学习的流水账。
第三篇那个两节点的通信,刚开始从
1-CREAP 源程序 2-《手把手》 3-《从入门到实践》 三个版本,相互交叉比较,反而搞糊涂了
"心想:怎么两个节点通信的程序: 可以两个源程序,每个节点各一个,也可以有1个源程序,每个节点通用"
这几天放假,闲的时候又比较了下,有所得,记录如下:
1- 我原本思路是从 ”自收发“ 转成 ”两点 通信“,自收发是已经调试通的(有点问题),稍微改了是可以做到转成”两点 通信“的。
那么,修改的地方是哪里呢?
如果使用一个程序的话,就是这里
//发送数据函数里面,
把
SJA_CMR = SRR_BIT;//置位自发送接收请求
改成
SJA_CMR = TR_BIT;//置位发送接收请求
在SJA1000 初始化里
把
//确保进入自接收模式
/* do
{
SJA_MOD = STM_BIT;
ucRegister_StatusTemp = SJA_MOD;
}
while( !(ucRegister_StatusTemp & STM_BIT) );
*/
改成
//确保进入接收过滤模式
do
{
SJA_MOD = AFM_BIT;
ucRegister_StatusTemp = SJA_MOD;
}
while( ucRegister_StatusTemp & RM_BIT );
上述, SRR_BIT,TR_BIT,STM_BIT,AFM_BIT 设置 都在 这里有定义
2-还有个地方
ACR 验收代码寄存器 与 AMR 验收屏蔽寄存器 以及 TX_buffer【1】~TX_buffer【4】
一个简单的关系就是
【在扩展帧,单滤波的前提下】
AMR0~AMR3 都是0xff ,及 无相关 设置后,
ACR0~ACR3 的设置无需与TX_buffer【1】~TX_buffer【4】 一一对应,如下