Skip to main content
Graduate II
February 18, 2024
Solved

How are the I2C3 pins being initialized by the visual configurator?

  • February 18, 2024
  • 2 replies
  • 846 views

Hi all,

I have a STM32F746 disco board and I'm trying to understand what the visual configurator (VC) does and doesn't do. I created an blank demo project for the board and I answer yes to the "initialize the board to default..." (or something like that).

There is only one function created by the VC: MX_GPIO_Init(). I can see all the code inside it that initializes various pins. The I2C3 pins (SDA and SCL) are there too. The VC does *not* have the I2C3 enabled.

Then, I enabled the I2C3 in the VC and saved. Now the code for the pins for the I2C3 is no longer inside MX_GPIO_Init(). In fact, is nowhere to be found ... by me... but the I2C3 works fine.

Where is the code to initialize the pins for the I2C3 when I enable I2C3 in VC?


BTW I'm calling the VC the window that opens up in STM32CubeIDE when you click on the ".ioc" file. Thanks.

    This topic has been closed for replies.
    Best answer by AScha.3

    Hi,

    look in src file stm32xxxx_hal_msp.c :

    void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
    {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
     if(hi2c->Instance==I2C1)
     {
     /* USER CODE BEGIN I2C1_MspInit 0 */
    
     /* USER CODE END I2C1_MspInit 0 */
    
     __HAL_RCC_GPIOB_CLK_ENABLE();
     /**I2C1 GPIO Configuration
     PB6 ------> I2C1_SCL
     PB7 ------> I2C1_SDA
     */
     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
     /* Peripheral clock enable */
     __HAL_RCC_I2C1_CLK_ENABLE();
     /* USER CODE BEGIN I2C1_MspInit 1 */
    
     /* USER CODE END I2C1_MspInit 1 */
     }
    
    }

    + dont forget to set scl+sda pins pullups ! + use extra pullups for higher speed.

    2 replies

    Technical Moderator
    February 18, 2024

    Hello @Rodo 

    First,  what you are calling VC is CubeMX. You can use it inside Cube to do some configurations and modifications on the interfaces initialisation, configuration,... It can also do the same thing for other IDEs (IAR, keil) by using it direclly to start your project. Then, it will generate the code on the IDE that you are going to use.

    For the I2C3, when you cnonfigure this IP or ut is cinfigured by default, the Pin initialisation is inside the

    HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) 

    But the I2C3 configurations are iside the MX_I2C3_Init() fonction.

    Best Regards.

    STTwo-32 

    AScha.3Answer
    Super User
    February 18, 2024

    Hi,

    look in src file stm32xxxx_hal_msp.c :

    void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
    {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
     if(hi2c->Instance==I2C1)
     {
     /* USER CODE BEGIN I2C1_MspInit 0 */
    
     /* USER CODE END I2C1_MspInit 0 */
    
     __HAL_RCC_GPIOB_CLK_ENABLE();
     /**I2C1 GPIO Configuration
     PB6 ------> I2C1_SCL
     PB7 ------> I2C1_SDA
     */
     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
     /* Peripheral clock enable */
     __HAL_RCC_I2C1_CLK_ENABLE();
     /* USER CODE BEGIN I2C1_MspInit 1 */
    
     /* USER CODE END I2C1_MspInit 1 */
     }
    
    }

    + dont forget to set scl+sda pins pullups ! + use extra pullups for higher speed.