Я пытаюсь связать следующую микросхему с STM32F4 https://www.nxp.com/docs/en/supporting-information/AN12207.pdf
В настоящее время я пытаюсь передать повторный запуск с использованием последовательной передачи с прерыванием, но она не работает вообще, яполучить NAK.
Кто-нибудь подскажет мне, как его интерфейс и какие функции HAL мне следует использовать?
unsigned int axI2CWriteRead(unsigned char bus_unused_param, unsigned char addr,
unsigned char *pTx, unsigned short txLen,
unsigned char *pRx, unsigned short *pRxLen)
{
extern I2C_HandleTypeDef hi2c3;
bool recv_length = false;
HAL_StatusTypeDef status;
*pRxLen = 0;
memset(pRx, 0, 2);
uint8_t rxData[255] = {0};
status = HAL_I2C_Master_Sequential_Transmit_IT(&hi2c3, 0x90, pTx, txLen, I2C_FIRST_FRAME);
if (status != HAL_OK)
return I2C_FAILED;
while (HAL_I2C_GetState(&hi2c3) != HAL_I2C_STATE_READY)
;
readblock = true;
readblock_length = 0;
status = HAL_I2C_Master_Sequential_Receive_IT(&hi2c3, 0x90, rxData, 255, I2C_LAST_FRAME);
if (status != HAL_OK)
return I2C_FAILED;
while (HAL_I2C_GetState(&hi2c3) != HAL_I2C_STATE_READY)
;
readblock = false;
readblock_length = 0;
*pRxLen = rxData[0] + 1;
memcpy(pRx, rxData, *pRxLen);
return I2C_OK;
}
Инициализация I2C3
static void MX_I2C3_Init(void)
{
/* USER CODE BEGIN I2C3_Init 0 */
/* USER CODE END I2C3_Init 0 */
/* USER CODE BEGIN I2C3_Init 1 */
/* USER CODE END I2C3_Init 1 */
hi2c3.Instance = I2C3;
hi2c3.Init.ClockSpeed = 100000;
hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c3.Init.OwnAddress1 = 0;
hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c3.Init.OwnAddress2 = 0;
hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_ENABLE;
if (HAL_I2C_Init(&hi2c3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN I2C3_Init 2 */
/* USER CODE END I2C3_Init 2 */
}