主题中讨论的其他器件:BQSTUDIO、
大家好、
我已经使用此 BMS 两个月了、但我甚至无法连接 BMS 系统和任何 MCU。 我之前尝试使用 STM32F407板建立通信、但没有任何结果。 我使用函数 HAL_isDeviceReady()来检查 BMS 的地址(根据数据表应该是0x16/0x17),但电路板无法识别任何地址。
我放弃了这一点、并开始使用 Arduino Uno 板、认为它会更容易。 我弄错了。 我仍然有同样的问题。 我创建了一个代码来检查电路板是否看到任何从器件地址连接到128个可能的地址中的任何一个、但电路板无法识别任何内容。 实际上、只要我连接 BMS 数据线、串行端口就会冻结、只打印几个字符。 下面显示了我使用的 Arduino 代码。
有人能帮忙吗!!
P.S. 我必须指出,我编写的 HAL_isDeviceReady()和 Arduino 代码都可以与我测试过的任何其他 I2C 设备配合使用。
#include
//#include
//#ifdefined (Arduino)&& Arduino >= 100
//#include "Arduino .h"
/*
#define printIIC (args) Wire.write (args)
内联 size_t CheckAddress:::写入(uint8_t 值){
SEND (值、Rs);
返回1;
}*/
void setup()
{
Serial.begin(2000000);
Wire.begin();
serial.println ("\nI2C 扫描仪");
//while (!Serial); // Leonardo:等待串行监视器
//delay (1000);
}
void loop()
{
字节错误、地址;
Int nDevices;
serial.println ("正在扫描...");
nDevices = 0;
for (address = 0;address < 127;address++)
{
serial.print ("Scanninng address");
serial.println (地址);
// i2c_scanner 使用的返回值
// Write.endTransition 以查看是否
//器件确实确认了地址。
Wire.beginTransmission(address);
错误= Wire.endTransmission ();
如果(错误=0)
{
serial.print ("I2C 器件位于地址0x");
if (地址<16)
serial.print ("0");
serial.print (address、hex);
serial.println("!") ;
nDevices++;
}
否则(error=4)
{
serial.print ("地址0x处 的未知错误");
if (地址<16)
serial.print ("0");
serial.println (地址、十六进制);
}
}
如果(nDevices = 0)
serial.println ("未找到 I2C 设备\n");
其他
serial.println ("done");
延迟(5000); //等待5秒钟以进行下一次扫描
}