cancel
Showing results for 
Search instead for 
Did you mean: 

I2C HAL code not generating clock

SNaik.5
Associate

Dear All,

I am using STM32L431 controller and connecting I2C2 for Tilt sensor to read the value. I have generated the code using CubeMX tool by configuring the clock and pin. Controller is running at 24MHz clock and configures I2C with 100KHz. I am getting HAL error message after read operation and I am not getting any clock in CRO.

Please find the below code and let me know where I have done mistake

void SystemClock_Config(void)

{

 RCC_OscInitTypeDef RCC_OscInitStruct;

 RCC_ClkInitTypeDef RCC_ClkInitStruct;

 RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

 /**Configure the main internal regulator lvoutput voltage

 */

 __HAL_RCC_PWR_CLK_ENABLE();

 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

 /**Initializes the CPU, AHB and APB busses clocks

 */

 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE| RCC_OSCILLATORTYPE_LSI;

 RCC_OscInitStruct.HSEState = RCC_HSE_ON;

 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

 {

   Error_Handler();

 }

 /**Initializes the CPU, AHB and APB busses clocks

 */

 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK

                               | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;

 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;

 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

 {

   Error_Handler();

 }

 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C2;

 PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;

 PeriphClkInit.I2c2ClockSelection = RCC_I2C2CLKSOURCE_SYSCLK;

 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

 {

   Error_Handler();

 }

 /**Configure the Systick interrupt time

 */

 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);

 /**Configure the Systick

 */

 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

 /* SysTick_IRQn interrupt configuration */

 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

void MX_I2C2_Init(void)

{

 /* USER CODE BEGIN I2C2_Init 0 */

 /* USER CODE END I2C2_Init 0 */

 /* USER CODE BEGIN I2C2_Init 1 */

 /* USER CODE END I2C2_Init 1 */

 hi2c2.Instance = I2C2;

 hi2c2.Init.Timing = 0x00506682;

 hi2c2.Init.OwnAddress1 = 0;

 hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;

 hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;

 hi2c2.Init.OwnAddress2 = 0;

 hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;

 hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;

 hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;

 if (HAL_I2C_Init(&hi2c2) != HAL_OK)

 {

   Error_Handler();

 }

 /**Configure Analogue filter

 */

 if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)

 {

   Error_Handler();

 }

 /**Configure Digital filter

 */

 if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)

 {

   Error_Handler();

 }

 /* USER CODE BEGIN I2C2_Init 2 */

 /* USER CODE END I2C2_Init 2 */

}

/* Following code to read the Device ID from Sensor*/

uint8_t I2C_Read(void)//(uint8_t *pData,uint16_t Size)

{

 I2C_HandleTypeDef hi2cHandler;

 uint16_t SlaveDevAddress = 0X18;

 uint32_t TxTimeout = 1000;

 uint8_t DataRec[10]={0,0,0,0,0};

 uint16_t MemAddress = 0x0F;

 uint16_t MemAddSize =1;

 uint8_t Status=0;

 Status = HAL_I2C_Mem_Read(&hi2c2, SlaveDevAddress, MemAddress, MemAddSize, DataRec, 1, 1000);

 printf("Sensor data = %d ..... status =%d \n\r", DataRec[0], Status);

 return Status;

}

0 REPLIES 0