Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Danis

Привет всем! У меня с SPI на STM32F непонятка. Передаю 2 байта по SPI1, так что, сначало
выбираю чип (CS_LOW) потом по очереди передаю 2 байта, ожидая завершениия передачи, но реально
CS_ HIGH срабатывает еще до того как будет передан 2-й байт. Пользуюсь последней перефирийной библиотекой.
Что за ерунда?


CS_LOW;

// Wait for SPI1 Tx buffer empty
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

// Send SPI1 data
SPI_I2S_SendData(SPI1, 0x90);

// Wait for SPI1 Tx buffer empty
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

// Send SPI1 data
SPI_I2S_SendData(SPI1, 0xAA);

// Wait for SPI1 Tx buffer empty
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

CS_ HIGH;
MALLOY2
А вы ей не пользуйтесь !

Код
u8_t spi_process(u8_t data)
{
  SPI2->DR = data;
  while(!SPI2->SRbit.RXNE);
  return SPI2->DR;
}

И никаких проблем
AHTOXA
Цитата(MALLOY2 @ Oct 18 2010, 16:27) *
И никаких проблем


Проблемы могут остаться и в этом случае. Вот тут писалось. (Там дальше по теме ещё немного есть)
Danis
Цитата(MALLOY2 @ Oct 18 2010, 13:27) *
А вы ей не пользуйтесь !

Код
u8_t spi_process(u8_t data)
{
  SPI2->DR = data;
  while(!SPI2->SRbit.RXNE);
  return SPI2->DR;
}

И никаких проблем


Вот так переписал, что наверное то что вы имели ввиду, заработало адекватно. MALLOY2 Спасибо!!!

//---------------------------------------------------------------------------
uint8_t spi_process(uint8_t data)
{
SPI1->DR = data;

while ( (SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET );

return SPI1->DR;
}
//***************************************************** biggrin.gif **
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.