主题中讨论的其他器件:OPT3001、 BOOSTXL-SENSORS
大家好、在我上一篇文章之后、我尝试在 MSP432 Launchpad 和 Sensors BoosterPack 上的 OPT3001传感器之间建立 I2C 连接。
我正在使用 i2c.h 库中的函数、但我不确定我所做的是不是正确的。 我在这篇帖子中提出了很多问题、如果阅读这篇文章的人只能回答一个特定的问题、我很高兴听到它!
这是我的"设置函数":
void Setup_MSP432_Receive (void)(空)
{
//配置端口以使用 Sensors BoosterPack
//为 I2C_SCL 选择 I2C 功能(P6.5)
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P6、GPIO_PIN5、GPIO_PRIMARY_MODULE_Function);
//为 I2C_SDA 选择 I2C 功能(P6.4)
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P6、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function);
//在接收模式下将 MSP432 Launchpad 配置为主器件
MAP_I2C_initMaster (EUSCI_B0_BASE、&I2CCONFIG_eUSCIB0);
MAP_I2C_setSlaveAddress (EUSCI_B0_BASE、0x47);//OPT3001 I2C 7位地址
MAP_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Receive_mode);//设置主设备以接收 OPT 数据
MAP_I2C_enableModule (EUSCI_B0_BASE);//启用 I2C 模块
}
这应将我的 MSP432设置为 I2C 连接中的主设备。 这是设置主设备的正确方法还是在错误路径上? 此外、我还需要将 OPT3001传感器设置为从设备吗?是否足够使用"setSlaveAddress"函数中的地址、它将被识别为支持 I2C 的外设?
现在、我正在尝试从传感器读取"lux"数据。 它保存在一个名为"结果"的寄存器中、该寄存器的长度为2字节。 我尝试使用此函数读取数据。
uint16_t readOPT3001数据(空)
{
uint8_t data[2];
setup_MSP432_receive();
MAP_I2C_masterReceiveStart (EUSCI_B0_BASE);
DATA[0]= MAP_I2C_masterReceiveMultiByteNext (EUSCI_B0_BASE);
DATA[1]= MAP_I2C_masterReceiveMultiByteFinish (EUSCI_B0_BASE);
}
我意识到我没有返回声明,我稍后将补充。 我的问题是"MAP_I2C_masterReceiveStart()"是否允许我从传感器读取数据? 如果我甚至不传递寄存器的地址、它如何知道如何从"结果"寄存器中读取? 此外、该器件:
DATA[0]= MAP_I2C_masterReceiveMultiByteNext (EUSCI_B0_BASE);
DATA[1]= MAP_I2C_masterReceiveMultiByteFinish (EUSCI_B0_BASE);
此部件似乎错误。 这些函数仅允许我读取一个字节、但寄存器为2个字节。 如何使用 I2C 读取该2字节寄存器?
此外、我是否需要在每次传输后发送一个 ACK 位、或者函数本身是否执行此操作?
感谢您的帮助!