cancel
Showing results for 
Search instead for 
Did you mean: 

[STM32F042] I2C slave receive only address

licencje1
Associate II
Posted on October 19, 2015 at 13:48

Hi,

for last three days I try to communicate with my STM32F042 (working in slave mode) but it doesn't work correctly. There is no data in RXDR and busy flag is set after correct receive of address (ADDCODE flag is set after master try to write data do slave). So if address is received correctly it looks like communication interface works almost correctly (pullup, gpio settings etc.)

Code was generated by ST32CubeMX as follows:

void MX_I2C1_Init(void)

{

  hi2c1.Instance = I2C1;

  hi2c1.Init.Timing = 0x00B0DBFF;

  hi2c1.Init.OwnAddress1 = 40;

  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;

  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;

  hi2c1.Init.OwnAddress2 = 0;

  hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;

  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED;

  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED;

  HAL_I2C_Init(&hi2c1);

    /**Configure Analogue filter 

    */

  HAL_I2CEx_AnalogFilter_Config(&hi2c1, I2C_ANALOGFILTER_DISABLED);

}

void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)

{

  GPIO_InitTypeDef GPIO_InitStruct;

  if(hi2c->Instance==I2C1)

  {

  /* USER CODE BEGIN I2C1_MspInit 0 */

  /* USER CODE END I2C1_MspInit 0 */

  

    /**I2C1 GPIO Configuration    

    PA9     ------> I2C1_SCL

    PA10     ------> I2C1_SDA 

    */

    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

    GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* Peripheral clock enable */

    __I2C1_CLK_ENABLE();

    /* Peripheral interrupt init*/

    HAL_NVIC_SetPriority(I2C1_IRQn, 0, 0);

    HAL_NVIC_EnableIRQ(I2C1_IRQn);

  /* USER CODE BEGIN I2C1_MspInit 1 */

  /* USER CODE END I2C1_MspInit 1 */

  }

#slave #i2c #hal #stm32f0
1 REPLY 1
Walid FTITI_O
Senior II
Posted on July 15, 2016 at 18:29

Hi PatLas,

Try to share the code of you main() to be able to help you on this. It is maybe related to the I2C receive routine implimented there.

-Hannibal-