Например TDA7294

Форум РадиоКот • Просмотр темы - STM32F373CCT6 не работает чтение по SPI2
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 22:59:49

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


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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F373CCT6 не работает чтение по SPI2
СообщениеДобавлено: Сб апр 28, 2018 17:59:30 
Родился

Зарегистрирован: Вт июл 04, 2017 03:14:29
Сообщений: 8
Рейтинг сообщения: 0
Добрый день!
Никак не могу разобраться. Использую SPI2 для работы с модулем RFM23BP. С записью никаких проблем нет, все отлично работает. Но чтение не работает ни в какую. При этом я смотрю логическим анализатором обмен по SPI, там все отлично, модуль выдает значение регистра, но в приемном буфере в результате одни нули!
По железу все подключено 100% правильно
Обмен по SPI:
СпойлерИзображение


Настройки в CUBE:
СпойлерИзображение
Изображение


Код:
Код:
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////

 uint8_t si_data[3];

unsigned char si4432_read(unsigned char si_addr)
{
 
   si_addr &= 0x7F; //Add R\W bit to address

   RFM_CS_LO();

   
   HAL_SPI_Transmit(&hspi2,&si_addr,1,100);
   HAL_SPI_Receive(&hspi2,si_data,1,100);
   

   RFM_CS_HI();

  return si_data[0];
}


/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////


Код инициализации SPI:
Код:
/* SPI2 init function */
static void MX_SPI2_Init(void)
{

  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 7;
  hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}


Код:
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(hspi->Instance==SPI2)
  {
  /* USER CODE BEGIN SPI2_MspInit 0 */

  /* USER CODE END SPI2_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_SPI2_CLK_ENABLE();
 
    /**SPI2 GPIO Configuration   
    PB14     ------> SPI2_MISO
    PB15     ------> SPI2_MOSI
    PD8     ------> SPI2_SCK
    */
    GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_8;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI2_MspInit 1 */

  /* USER CODE END SPI2_MspInit 1 */
  }

}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F373CCT6 не работает чтение по SPI2
СообщениеДобавлено: Вс апр 29, 2018 08:35:34 
Встал на лапы

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс апр 29, 2018 08:28:33
Сообщений: 92
Рейтинг сообщения: 0
А если в этом участке
Код:
RFM_CS_LO();

   
   HAL_SPI_Transmit(&hspi2,&si_addr,1,100);
   HAL_SPI_Receive(&hspi2,si_data,1,100);
   

   RFM_CS_HI();

1. ...Transmit заменить на TransmitReceive, или
2. перед полезным ...Receive выполнить один холостой .. Receive, а лучше даже HAL_SPIEx_FlushRxFifo(...)?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F373CCT6 не работает чтение по SPI2
СообщениеДобавлено: Вс апр 29, 2018 15:57:12 
Родился

Зарегистрирован: Вт июл 04, 2017 03:14:29
Сообщений: 8
Рейтинг сообщения: 0
А если в этом участке
Код:
RFM_CS_LO();

   
   HAL_SPI_Transmit(&hspi2,&si_addr,1,100);
   HAL_SPI_Receive(&hspi2,si_data,1,100);
   

   RFM_CS_HI();

1. ...Transmit заменить на TransmitReceive, или
2. перед полезным ...Receive выполнить один холостой .. Receive, а лучше даже HAL_SPIEx_FlushRxFifo(...)?

Пробовал я вместо Receive TransmitReceive. Результат точно такой же. Делал еще три Receive подряд, результат каждого был 0, хотя на анализаторе опять же было видно что модуль отвечает верно.HAL_SPIEx_FlushRxFifo попробую.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32F373CCT6 не работает чтение по SPI2
СообщениеДобавлено: Чт май 03, 2018 18:55:28 
Родился

Зарегистрирован: Вт июл 04, 2017 03:14:29
Сообщений: 8
Рейтинг сообщения: 0
Проблема решена!
Как оказалось, то ли я что то не понял, то ли HAL настолько глючный, но чтение средствами HAL не работает. Вышел из ситуации так:
Код:
volatile unsigned int si4432_read(unsigned char si_addr)
{
  unsigned int si_data = 0;
   si_addr &= 0x7F; //Add R\W bit to address
   

   RFM_CS_LO();
   
   
   HAL_SPI_Transmit(&hspi2,&si_addr,1,10);
   HAL_SPI_Transmit(&hspi2,&si_addr,1,10);
   
   si_data = SPI2->DR;
   

   RFM_CS_HI();
   return si_data;
}

Тут мы видим отправку через HAL и чтение напрямую из регистра, так все работает. Но тоже есть ньюансы. Допустим мы читаем число 0x30. Так вот результат первого чтения будет 0x00000030, а результат последующих чтений - 0x00003000.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32F373CCT6 не работает чтение по SPI2
СообщениеДобавлено: Чт май 03, 2018 21:42:52 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
andreivanov писал(а):
Допустим мы читаем число 0x30. Так вот результат первого чтения будет 0x00000030, а результат последующих чтений - 0x00003000.
А если сделать так?
Код:
si_data = *(__IO uint8_t *)&SPI2->DR;


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32F373CCT6 не работает чтение по SPI2
СообщениеДобавлено: Пт май 04, 2018 18:41:47 
Встал на лапы

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс апр 29, 2018 08:28:33
Сообщений: 92
Рейтинг сообщения: 0
по-моему это и есть такое своеобразное фифо этой линейки.. Вероятно, эту особенность использует дма-канал для упаковки пересылок в полные слова.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

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


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

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


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

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


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