Например TDA7294

Форум РадиоКот • Просмотр темы - STM32F373 Настройка I2C в режиме СЛЕЙВ
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 11:41:45

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F373 Настройка I2C в режиме СЛЕЙВ
СообщениеДобавлено: Вс окт 04, 2020 17:50:47 
Первый раз сказал Мяу!

Зарегистрирован: Пн окт 31, 2016 09:39:37
Сообщений: 35
Рейтинг сообщения: 0
Доброго всем дня.

Помогите с программированием 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?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F373 Настройка I2C в режиме СЛЕЙВ
СообщениеДобавлено: Пн окт 05, 2020 20:33:31 
Первый раз сказал Мяу!

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F373 Настройка I2C в режиме СЛЕЙВ
СообщениеДобавлено: Вт окт 06, 2020 22:36:49 
Первый раз сказал Мяу!

Зарегистрирован: Пн окт 31, 2016 09:39:37
Сообщений: 35
Рейтинг сообщения: 0
Тема закрыта


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y