STM32F373 Настройка I2C в режиме СЛЕЙВ

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
pvg_79
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Пн окт 31, 2016 09:39:37

STM32F373 Настройка I2C в режиме СЛЕЙВ

Сообщение pvg_79 »

Доброго всем дня.

Помогите с программированием I2C
Использую библиотеку HAL, настроим I2C в режиме слейв на работу в двух режимах:
1. Запись данных в регистры;
2. Чтение данных.

Второй режим работает полностью принимает и отправляет данные.
А вот ПЕРВЫЙ режим работы, как мне показалось сложнее, а именно-
при передачи МАСТЕРОМ данных, СЛЕЙВ их принимает через функцию HAL_I2C_Slave_Seq_Receive_DMA и перестает принимать после обнаружения СТОП бита, а вот количество переданных байт МАСТЕРОМ неизвестно, как узнать количество переданных байт. Данные попадают в массив receiveI2C.

Мой код:

Код: Выделить всё

uint8_t transmitI2C[12];
uint8_t receiveI2C[7];

void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c)
{
    if(HAL_I2C_EnableListen_IT(hi2c) != HAL_OK)
    {
       //Error
    }
}

void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
{
  UNUSED(AddrMatchCode);
  if(hi2c->Instance == I2C1)
  {
    switch (TransferDirection)
        {
            case I2C_DIRECTION_TRANSMIT:
                if (HAL_I2C_Slave_Seq_Receive_DMA(hi2c, receiveI2C, 7, I2C_FIRST_AND_LAST_FRAME) != HAL_OK) //I2C_FIRST_FRAME
                {
                    //Error;
                }
                while (HAL_I2C_GetState(hi2c) != HAL_I2C_STATE_BUSY_RX_LISTEN); //HAL_I2C_STATE_LISTEN //HAL_I2C_STATE_BUSY_RX_LISTEN
            break;
            case I2C_DIRECTION_RECEIVE:
                if (HAL_I2C_Slave_Seq_Transmit_DMA(hi2c, transmitI2C, 12,  I2C_LAST_FRAME) != HAL_OK)
                {
                    // Error here!!! (HAL_BUSY)
                    //Error;
                }
                while (HAL_I2C_GetState(hi2c) != HAL_I2C_STATE_BUSY_TX_LISTEN); //HAL_I2C_STATE_READY //HAL_I2C_STATE_BUSY_TX_LISTEN
            break;
        }
  }
}
Добавлено after 32 minutes 23 seconds:
Наверное тему надо было создавать в ARM?
Реклама
pvg_79
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Пн окт 31, 2016 09:39:37

Re: STM32F373 Настройка I2C в режиме СЛЕЙВ

Сообщение pvg_79 »

Может написал не понятно, как узнать количество принятых байт слейвом.
Реклама
pvg_79
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Пн окт 31, 2016 09:39:37

Re: STM32F373 Настройка I2C в режиме СЛЕЙВ

Сообщение pvg_79 »

Тема закрыта
Ответить

Вернуться в «Разные вопросы по МК»