реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F, SPI TX?
Danis
сообщение Oct 18 2010, 10:08
Сообщение #1


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990




Привет всем! У меня с 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;


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Oct 18 2010, 10:27
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



А вы ей не пользуйтесь !

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

И никаких проблем
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 18 2010, 10:34
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


Проблемы могут остаться и в этом случае. Вот тут писалось. (Там дальше по теме ещё немного есть)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Danis
сообщение Oct 18 2010, 11:33
Сообщение #4


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(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 **


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 01:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016