2015-10-19 04:48 AM
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 #stm32f02016-07-15 09:29 AM
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-