2017-09-25 8 views
1

J'ai un microcontrôleur STM32F103 et je veux l'interfacer avec LIDAR en utilisant le bus I2C en mode Interruption. Cela fonctionne bien en mode Polling.I2C en mode Master Lecture 2 octets de LIDAR SF20

Les problèmes que j'ai rencontrés est: - Le bus n'a pas été libéré après avoir lu 2 octets. Quelqu'un peut-il m'expliquer comment lire 2 octets à partir du bus I2C dans STM32F103?

Répondre

0

Vous pouvez utiliser cette fonction pour initialiser le bus I2C.

/* I2C1 init function */ 
static void MX_I2C1_Init(void) 
{ 

    hi2c1.Instance = I2C1; 
    hi2c1.Init.ClockSpeed = 400000; 
    hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; 
    hi2c1.Init.OwnAddress1 = 0; 
    hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; 
    hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; 
    hi2c1.Init.OwnAddress2 = 0; 
    hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; 
    hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; 
    if (HAL_I2C_Init(&hi2c1) != HAL_OK) 
    { 
    Error_Handler(); 
    } 

} 

Ensuite, vous pouvez lire 2 octets avec l'appel HAL_I2C_Mem_Read.

HAL_I2C_Mem_Read(&hi2c1,(uint16_t)(ADDRESS << 1),register_address,I2C_MEMADD_SIZE_8BIT,rxbuffer,buffer_size,100);