STM32F030K6, I2C Slave, HAL_I2C_Slave_Seq_Transmit_IT(), reset MCU when datas are "0x00"
- June 30, 2020
- 7 replies
- 5689 views
Hi,
I have a issue with I2C Slave on an STM32F030K6.
Project is generated with :
- CubeMx 5.6.2
- Hal version: STM32Cube FW_F0 V1.11.0
- IDE : IAR 8.40.1
The STM32 is configured as an I2C Slave ans answers to an other STM32F0 HAL_I2C_Mem_Read() request.
I2C is configured in IT mode, and use :
- HAL_I2C_AddrCallback
- HAL_I2C_Slave_Seq_Receive_IT
- HAL_I2C_Slave_Seq_Transmit_IT
When HAL_I2C_Slave_Seq_Transmit_IT() is called with data equal to 0x00 the MCU reset (Else it works well).
In this case, it works well
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
{
if(AddrMatchCode == 4)
{
switch(TransferDirection) {
case I2C_DIRECTION_TRANSMIT :
if(HAL_I2C_Slave_Seq_Receive_IT(&hi2c1, &aRxBuffer[0], RXBUFFERSIZE, I2C_FIRST_FRAME) != HAL_OK)
{
Error_Handler();
}
break;
case I2C_DIRECTION_RECEIVE :
{
//Fill response with appropriate value
//------------------------------------
aTxBuffer[0] = 0xFF;
aTxBuffer[1] = 0x0;
aTxBuffer[2] = 0x0;
//Set to transmit
if(HAL_I2C_Slave_Seq_Transmit_IT(&hi2c1, &aTxBuffer[0], TXBUFFERSIZE, I2C_FIRST_FRAME) != HAL_OK)
{
Error_Handler();
}
}
break;
default :
break;
}
}
}
In this case, MCU reset
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
{
if(AddrMatchCode == 4)
{
switch(TransferDirection) {
case I2C_DIRECTION_TRANSMIT :
if(HAL_I2C_Slave_Seq_Receive_IT(&hi2c1, &aRxBuffer[0], RXBUFFERSIZE, I2C_FIRST_FRAME) != HAL_OK)
{
Error_Handler();
}
break;
case I2C_DIRECTION_RECEIVE :
{
//Fill response with appropriate value
//------------------------------------
aTxBuffer[0] = 0x0;
aTxBuffer[1] = 0x0;
aTxBuffer[2] = 0x0;
//Set to transmit
if(HAL_I2C_Slave_Seq_Transmit_IT(&hi2c1, &aTxBuffer[0], TXBUFFERSIZE, I2C_FIRST_FRAME) != HAL_OK)
{
Error_Handler();
}
}
break;
default :
break;
}
}
}
Note : I didn't see related issue in Errata.
Code attached (main.c & I2C.c)
Any idea will be appreciate ;)