2023-09-03 1:25 PM
Hi All,
I need some help with setting up a I2C slave on a STM32L422 chip. I have tried following the example: STM32Cube_FW_L4_V1.18.0/ NUCLEO-L412RB-P/examples/I2C_TwoBoards_ComIT but it doesn't seem to make sense to me. I realize it is not exactly the same as my chip but it should be close.
In my code I setup the I2C parameter settings as default except I've set the address for the slave as = 1. I have checked the NVIC I2C Event Interrupt and the Error Interrupt checkboxes.
In my main.c file I initialize the I2C
MX_I2C1_Init();
And then I have:
/*##-2- Put I2C peripheral in reception process ###########################*/
if(HAL_I2C_Slave_Receive_IT(&I2cHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
The program will hang here. I don't understand why it's hanging here as there has been no
characters sent to the slave yet.
In my stm32l4xxit.c file I use:
void I2C1_EV_IRQHandler(void)
{
HAL_I2C_EV_IRQHandler(&hi2c1);
}
void I2C1_ER_IRQHandler(void)
{
HAL_I2C_ER_IRQHandler(&hi2c1);
}
Have I messed up the interrupt routine? What should it look like? Ultimately, I want the slave
to receive 24 bytes and let the program know its got the data ready to process.
Thanks,
Richard
2023-09-03 1:54 PM - edited 2023-09-03 2:05 PM
2023-09-03 3:10 PM
Hello @RCooke88 ,
I suggest you use an oscilloscope to check SDA and SCL behavior.
Try to debug and set breakpoints .
Foued
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.