cancel
Showing results for 
Search instead for 
Did you mean: 

Undefined reference HAL_I2C_Init. Help?

Loucas Caplin
Associate
Posted on December 22, 2016 at 18:11

Hello everybody,

In first time, I'm sorry for my english! ^^

I'm trying to configure an I2C communication for a MCU STM32F401RT6. I don't use ...Cube_MX but I use STM32f4xx_HAL Library for different reason and not STM32f4xx library.

My program compile but there is a problem with the linker => I have the famous error message : undefined reference to 'HAL_I2C_Init' (Yes, again and again this error message ^^).

To simplify, I removed other file .c and .h and I keep just Main program.

Here main.c Program

#include ''stm32f4xx_hal.h''

#include ''stm32f4xx_hal_def.h''

#include ''stm32f4xx_hal_i2c.h''

#define I2Cx I2C1

#define I2Cx_CLK_ENABLE()                                     __HAL_RCC_I2C1_CLK_ENABLE()

#define I2Cx_SCL_GPIO_CLK_ENABLE()                __HAL_RCC_GPIOB_CLK_ENABLE()

#define I2Cx_SDA_GPIO_CLK_ENABLE()               __HAL_RCC_GPIOB_CLK_ENABLE()

#define I2Cx_FORCE_RESET()                                __HAL_RCC_I2C1_FORCE_RESET()

#define I2Cx_RELEASE_RESET()                            __HAL_RCC_I2C1_RELEASE_RESET()

#define I2Cx_SCL_PIN                                               GPIO_PIN_6

#define I2Cx_SCL_GPIO_PORT                               GPIOB

#define I2Cx_SDA_PIN                                              GPIO_PIN_7

#define I2Cx_SDA_GPIO_PORT                               GPIOB

#define I2Cx_GPIO_MODE                                        GPIO_MODE_AF_OD

#define I2Cx_GPIO_PULL                                           GPIO_PULLUP

#define I2Cx_GPIO_SPEED                                        GPIO_SPEED_FREQ_HIGH

#define I2Cx_SCL_AF                                                 GPIO_AF4_I2C1

#define I2Cx_SDA_AF                                                 GPIO_AF4_I2C1

//=======================================================================================

static I2C_HandleTypeDef hi2c;

//=======================================================================================

bool I2CInit(void);

int main(void) {

I2CInit();

}

bool I2CInit(void) {

hi2c.Instance = I2Cx;

hi2c.Init.ClockSpeed = 100000; // 100kHz

hi2c.Init.DutyCycle = I2C_DUTYCYCLE_2; // 50% duty cycle --> standard

hi2c.Init.OwnAddress1 = 0x00; // own address, not relevant in master mode

hi2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; // Set address length to 7 bit addresses

hi2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; // Disable seconde Address

hi2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; // Disable general call

hi2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; // Disable no stretch

hi2c.Devaddress = 0x3B;

if (HAL_I2C_DeInit(&hi2c) != HAL_OK) {

return false;

}

if (HAL_I2C_Init(&hi2c) != HAL_OK) {

return false;

}

//HAL_I2C_MspInit(&hi2c);

return true;

}

//=======================================================================================

I compile and link with a makefile and config.mk on Cygdrive terminal.

here the message on my terminal.

0690X00000605pYQAQ.png

I don't see where is the problem. I looked for on google but I didn't find a solution. I specify that the stm32f4xx_hal_conf.h include HAL_I2C_MODULE_ENABLED

0690X00000605vQQAQ.png

Do you understand where is the problem?

Thank you very much for your assistance?

Régis

1 REPLY 1
Imen.D
ST Employee
Posted on December 26, 2016 at 15:15

Dear

loucas

‌,

It seems your pathis not configured properly.

Make sure that your project has the right include paths and source files from the same tree.

Best Regards

Imen

When your question is answered, please close this topic by clicking "Accept as Solution".
Thanks
Imen