0
\ \ begingroup \美元

https://github.com/coryjfowler/MCP_CAN_lib/blob/master/examples/CAN_loopback/CAN_loopback.ino我使用这个库来实现CAN总线,我使用环回模式的例子使用一个单arduino连接到MCP2525 CAN传输器。但是我得到的错误是MCP2515还没有初始化,消息正在传输。我如何解决这个错误?在此输入图像描述

的#include 的#include  // CAN TX变量无符号长prevTX = 0;//变到最后一次执行时间存储const的无符号整型invlTX = 1000;//一个第二间隔恒定字节数据[] = {和0xAA,0x55​​的,0×01,为0x10,0xFF时,0×12,0x34,0x56储存};//通用CAN数据发送// CAN RX变量长期无符号整型rxId;无符号的字符len个;无符号字符RXBUF; [8]//串行输出字符串缓冲炭msgString [128];// CAN0 INT和CS的#define CAN0_INT 2 //设置INT到销2 MCP_CAN CAN0(10);//设置CS到销10的空隙的设置(){Serial.begin(115200);// CAN在500,000BPS运行; 115,200BPS is SLOW, not FAST, thus 9600 is crippling. // Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled. if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!"); else Serial.println("Error Initializing MCP2515..."); // Since we do not set NORMAL mode, we are in loopback mode by default. //CAN0.setMode(MCP_NORMAL); pinMode(CAN0_INT, INPUT); // Configuring pin for /INT input Serial.println("MCP2515 Library Loopback Example..."); } void loop() { if(!digitalRead(CAN0_INT)) // If CAN0_INT pin is low, read receive buffer { CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s) if((rxId & 0x80000000) == 0x80000000) // Determine if ID is standard (11 bits) or extended (29 bits) sprintf(msgString, "Extended ID: 0x%.8lX DLC: %1d Data:", (rxId & 0x1FFFFFFF), len); else sprintf(msgString, "Standard ID: 0x%.3lX DLC: %1d Data:", rxId, len); Serial.print(msgString); if((rxId & 0x40000000) == 0x40000000){ // Determine if message is a remote request frame. sprintf(msgString, " REMOTE REQUEST FRAME"); Serial.print(msgString); } else { for(byte i = 0; i= invlTX){ // Send this at a one second interval. prevTX = millis(); byte sndStat = CAN0.sendMsgBuf(0x100, 8, data); if(sndStat == CAN_OK) Serial.println("Message Sent Successfully!"); else Serial.println("Error Sending Message..."); } }
新贡献者
MANPREET辛格阿卢瓦利亚是这个网站的新贡献者。注意要求澄清,评论和回答。看看我们的的行为准则
\$\endgroup\$
    0
    \ \ begingroup \美元

    我会建议你使用两个单位和使用发送和接收包含在与库的例子。您正在使用的图书馆的伟大工程,是否良好。矿上来的第一次尝试。只是有点信息,CAN报文必须承认,否则你会得到一个错误。一个常见的误解是,CAN模块可以倾诉自己,在技术上它必须监视总线,但不保存该消息。直到用户达到他们忘了,你至少需要两个或多个节点的第一个到达那里系统或两个(正确端接)建立一个网络,否则CAN总线控制器将简单地返回错误信息。是的,你可能会看到总线上的数据,但没有确认这将是不完整的。在环回模式中的MPC2515从发送忽略ACK并且将数据在内部接收缓冲器,但它实际上并不在总线上发送消息。总之,没有消息将在总线上被传送,而在环回模式(包括错误标志或确认信号)。该TXCAN引脚处于隐性状态“。

    你的代码显示的是16Mhz的晶体,如果它是中国克隆的,它可能有8Mhz的晶体。我还建议你把波特率降低到一个更低的值(CAN_250KBPS),直到你得到它的工作。重要的是CAN-H和CAN-L连接正确,否则将无法工作。

    \$\endgroup\$

      你的答案

      MANPREET辛格阿卢瓦利亚是一个新的贡献者。很好,看看我们的的行为准则

      点击“发布你的答案”,即表示你同意我们的服务条款隐私政策饼干的政策

      不是你想要的答案?浏览其他带标签的问题问你自己的问题