void I2CTransfer(uint16_t deviceAddr, uint8_t cmdArray[], uint8_t dataArray[], uint16_t cmdLen, uint16_t dataLen, uint16_t flag) { // Õâ¸öº¯ÊýÓÉi2cReadRegister/i2cWriteRegisterµ÷Óã¬ÊÇ×î»ù±¾µÄI2C´«Ê亯Êý¡£ // Ïȼì²éflag£¬Õâ´Î´«ÊäÊǶÁ»¹ÊÇд // È»ºó¼ì²é¶ÁдµÄ×Ö½ÚÊý£¬¶ÔÕÕBQ27441оƬÊÖ²á

// ʹÓÃLL_I2C_TransmitReceiveº¯ÊýÖеÄI2C´«Ê亯Êý£¬Ö»ÄÜʹÓÃÒ»¸öbuf£¬µ÷ÓÃÖ¸ÏòÊý×éµÄ·½·¨£¬ÒòΪËùÓдúÂëÆ÷ÒѾ­ÓÐÒ»¸öI2C´«Êä˵Ã÷º¯Êý£¬Í¨¹ýÕâÀïµÄbufʹÓöà´Î£¬¿ÉÒÔµ÷ÓÃÕâÀïµÄI2C´«Ê亯ÊýʵÏÖÕâ¸öº¯Êý¡£

// ÔÚ´Ëʱ£¬Õâ¸öº¯ÊýÖ»Ö§³ÖÒ»¸ö×Ö½ÚµÄÊý×飬ËùÒÔÊÇλÖÃÒì³£µÄ£¬²»ÄÜʵÏÖÏàÓ¦µÄ½ÓÊÕ·½·¨£¬ÓëÆäËûµÄI2C´«Ê亯ÊýҲҪʹÓã¬ÕâÑù±¾²»ÒªÀ´µÄÊÇÒ»¸ö×Ö½ÚµÄÊý×飬ÒòΪbufʹÓõÄʱºòÒ²Òª½øÐÐÈ«¾Ö£¬ÕâÀïûÓÐË¢ÐÂbufµÄĬÈÏÖµ£¬ËùÒÔʹÓÃÕâÀïµÄ×Ö½ÚÊý×é´«ÊäÊý×飬ÕâÀïµÄ×Ö½ÚÊý×鳤¶È²»Äܳ¬¹ý¶àÉÙ£¬ÒòΪbufµÄ³¤¶ÈÊÇÿ´Î×î¶àÒ»¸öÊý×鳤¶ÈµÄ¶Ë¿Ú£¬È»ºó¸Ðл³ÉÒ»¸öÊý×é¡£

// ÆäÖУ¬flagÒѾ­²ÎÊýÁË£¬Èç¹ûÊÇI2C_FLAG_WRITE_READ£¬ÔòʹÓÃLL_I2C_TransmitReceiveº¯Êý£¬Èç¹ûÊÇI2C_FLAG_WRITE_WRITE£¬ÔòֻʹÓÃLL_I2C_Transmitº¯Êý£¬µ÷Ó÷µ»ØÖµÒ²²»ÄÜʹÓ㬵«ÊÇÏë×Ô¶¯µ÷Óõĺ¯ÊýÖеÄÊý×é¡£

if(flag == I2C_FLAG_WRITE_READ)
{
	// ÆäËûº¯ÊýµÄЭ·½ÊÇһЩ¿ÉÒÔÔÝδµ÷Óõĺ¯Êý£¬ÒòΪÔÚÕâÀïûÓÐÒ»¶¨µÄÕʺϣ¬ÒªÔÝʱ¿ªÊ¼ÊµÏÖ£¬µ÷Óõĺ¯Êý¶ÔÊý×鳤¶ÈÒ»¶¨£¬µ÷ÓÃÊý×é²»ÄÜʹÓó¤¶È±íʾÊý×鳤¶È£¬ÒòΪÕâÀïûÓÐÒ»¶¨µÄÕʺϡ£
	
	// ÔÚ²ÎÊýÖУ¬cmdArrayÊÇдÃüÁdataLenÊÇдÊý¾Ý³¤¶È£¬Ö»ÓÐÒ»¸ö×Ö½Ú£¬ËùÒÔÔÚÕâÀïֻʹÓÃcmdLen¡£
	
	// ʹÓÃÒ»¸öbuf£¬Êý×é´«Ê亯ÊýʹÓ÷µ»ØÖµÊÇÅжÏÊÇ·ñÕýÈ·£¬µ÷ÓÃÕâ¸öº¯ÊýÒÔÏÂÕâÀïµÄbuf×÷ΪÊäÈë²ÎÊý£¬È»ºóÕâÀïµÄdataArray×÷ΪÊä³ö²ÎÊý£¬ÕâÑù±¾²»ÐèҪȫ¾Ö£¬ÒòΪbufʹÓÃʱ¼äÊÇÒ»¸ö»ù±¾µÄÊäÈë²ÎÊý£¬¶øÊý×鳤¶È²»Äܳ¬¹ýÒ»¶¨µÄÖµ£¬ËùÒÔÕâÀï²»ÐèҪȫ¾Ö£¬Ö»ÊÇÔÚÕâÀïʹÓÃbufËùÒÔÊý×éÄ·½·¨£¬·µ»ØÖµÒ²²»ÄÜÊǽâ¾öһЩ³ÌÐòÖеÄÎÊÌ⣬µ«ÊÇËùÒÔÔÚÕâÀïÏàµÈµÄʱºò£¬bufµÄ³¤¶ÈÊÇÿ´Î×î¶àÒ»¸öÊý×鳤¶ÈµÄ¶Ë¡£
	
	uint8_t buf[cmdLen];
	for(int i = 0; i < cmdLen; i++)
	{
		buf[i] = cmdArray[i];
	}
	LL_I2C_TransmitReceive(I2C_Handle, deviceAddr, buf, cmdLen, dataArray, dataLen);
}
else if(flag == I2C_FLAG_WRITE_WRITE)
{
	// ÆäËûº¯ÊýµÄЭ·½ÊÇһЩ¿ÉÒÔÔÝδµ÷Óõĺ¯Êý£¬ÒòΪÔÚÕâÀïûÓÐÒ»¶¨µÄÕʺϣ¬ÒªÔÝʱ¿ªÊ¼ÊµÏÖ£¬µ÷Óõĺ¯Êý¶ÔÊý×鳤¶ÈÒ»¶¨£¬µ÷ÓÃÊý×é²»ÄÜʹÓó¤¶È±íʾÊý×鳤¶È£¬ÒòΪÕâÀïûÓÐÒ»¶¨µÄÕʺϡ£
	
	// ÔÚ²ÎÊýÖУ¬cmdArrayÊÇдÃüÁdataLenÊÇдÊý¾Ý³¤¶È£¬Ö»ÓÐÒ»¸ö×Ö½Ú£¬ËùÒÔÔÚÕâÀïֻʹÓÃcmdLen¡£
	
	// ʹÓ÷µ»ØÖµÒ»¶¨ÊÇÅжÏÊÇ·ñÕýÈ·£¬ÕâÀïµÄÒ»¸öbufÊÇÒ»¸ö»ù±¾£¬ËùÒÔÕâÀïûÓÐˢеÄÕʺϣ¬µ÷ÓÃÕâ¸öº¯ÊýÒÔÏÂÕâÀïµÄbuf×÷ΪÊäÈë²ÎÊý£¬È»ºóÕâÀïµÄdataArray×÷Ϊ¿ÕÊä³ö²ÎÊý£¬ÕâÑù±¾²»ÐèҪȫ¾Ö£¬ÒòΪbufʹÓÃʱ¼äÊÇÒ»¸ö»ù±¾µÄÊäÈë²ÎÊý£¬¶øÊý×鳤¶È²»Äܳ¬¹ýÒ»¶¨µÄÖµ£¬ËùÒÔÕâÀï²»ÐèҪȫ¾Ö£¬Ö»ÊÇÔÚÕâÀïʹÓÃbufËùÒÔÊý×éÄ·½·¨£¬·µ»ØÖµÒ²²»ÄÜÊǽâ¾öһЩ³ÌÐòÖеÄÎÊÌ⣬µ«ÊÇËùÒÔÔÚÕâÀïÏàµÈµÄʱºò£¬bufµÄ³¤¶ÈÊÇÿ´Î×î¶àÒ»¸öÊý×鳤¶ÈµÄ¶Ë¿Ú£¬È»ºó¸Ðл³ÉÒ»¸öÊý×é¡£
	
	uint8_t buf[cmdLen + dataLen];
	for(int i = 0; i < cmdLen; i++)
	{
		buf[i] = cmdArray[i];
	}
	for(int i = 0; i < dataLen; i++)
	{
		buf[cmdLen + i] = dataArray[i];
	}
	LL_I2C_Transmit(I2C_Handle, deviceAddr, buf, cmdLen + dataLen);
}
BQ27441 I2C 传输函数实现:完成 I2CTransfer 函数

原文地址: https://www.cveoy.top/t/topic/nl4C 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录