Перейти к содержанию
    

"но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на Во-первых, кто он?

ОН контроллер)) ко е что прояснилось, но вопросы с чтением по падению или возрастанию в линии тактирования открыты

Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

The first bit (bit 0) starts at the first falling edge of SCL after the falling edge

of CS while the last bit (bit 15, bit 23,...) starts at the last falling edge of SCL just before the

rising edge of CS.

Вот выдержка из даташита, которая говорит тоже самое

Можно как то настроить чтобы он не по возрастанию читал линию данных а по падению

 

 

Биты CPOL, CPHA в настройках SPI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Данные у вас меняются по заднему фронту SCL, фиксируются по переднему фронту. Всё нормально.

Похоже и правда все норм))

от того страннее что ничего не работает))

 

 

Биты CPOL, CPHA в настройках SPI

этот вопрос снят, вроде и впрямь и так все правильно работает

зато вот какая странность

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

post-87107-1435303702_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну что?

 

SPI2->CR1 |= SPI_CR1_CPOL; //исходное состояние SCK==1

SPI2->CR1 |= SPI_CR1_CPHA; //capture 0-->1

не судьба?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сейчас сделаю)) посмотрим что будет

Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже и правда все норм))

от того страннее что ничего не работает))

 

 

 

этот вопрос снят, вроде и впрямь и так все правильно работает

зато вот какая странность

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

 

Какой смысл вашего сообщения? Запись в датчик по адресу 0x00? При том что: Reserved - 0x00..0x0E - Do not modify.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой смысл вашего сообщения? Запись в датчик по адресу 0x00? При том что: Reserved - 0x00..0x0E - Do not modify.

смысл этого сообщения просто привести кубики в соответствие с даташитом, само сообщение смысла не несет,

а вот это уже несет

но можете подсказать как передвинуть сообщение с последних 8 тактов на первые 8, а то пока вот так

 

 

 

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}

 

GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2);

 

SPI_I2S_SendData(SPI2, 0x8F);

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);

 

Delay(1);

GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);

Delay(100);

Сейчас юзаю такой код, чисто отсылаю и не опрашиваю

post-87107-1435304965_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это одна команда SPI2->DR = 0x8F?

Вот что хотите делайте, но на диаграмме 16-битовый обмен: 0x008F.

 

"Сейчас юзаю такой код, чисто отсылаю и не опрашиваю "

Нельзя так делать: цикл шины датчика должен быть завершённым; впрочем так и есть - запись по адресу 0x00 числа 0x8F что запрещено. Изнасилованный HTS221 :crying:

Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это одна команда SPI2->DR = 0x8F?

Вот что хотите делайте, но на диаграмме 16-битовый обмен: 0x008F.

void Init_SPI2()
{
 SPI_InitTypeDef   SPI_InitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);   

 SPI_Cmd(SPI2, DISABLE); 
 SPI_I2S_DeInit(SPI2);

 init_GPIO_for_SPI2(); 

 // Настройки SPI2
 SPI_InitStructure.SPI_Direction=SPI_Direction_1Line_Tx;
 SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b;
 SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
 SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
 SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
 SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256; 
 SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
 SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
 SPI_InitStructure.SPI_CRCPolynomial=7;  

 SPI_Init(SPI2,&SPI_InitStructure);

 SPI_Cmd(SPI2,ENABLE);

 GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);
}

 

 
 SPI2->CR1 |= SPI_CR1_CPOL; //исходное состояние SCK==1
 SPI2->CR1 |= SPI_CR1_CPHA; //capture 0-->1
while(1)
 {

  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
  GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2);

  //while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}

  SPI_I2S_SendData(SPI2, 0x8F);
  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  /*
  SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx); 

  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  uint8_t data = SPI_I2S_ReceiveData(SPI2);
  SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
*/
  GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);
  Delay(100);
  /*
  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}
  uint8_t data = SPI_I2S_ReceiveData(SPI2);
  */

 }

 

Вот хоть убейте, ничего больше нету

 

Заменил отправку на

SPI_I2S_SendData(SPI2, 0x8F00);

теперь сдвинулось на первые 8 бит

Изменено пользователем BooSooV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Вот хоть убейте…"

" SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b; "

 

Из солёного огурца пристрелить разве что…

 

Заменил отправку на

SPI_I2S_SendData(SPI2, 0x8F00);

теперь сдвинулось на первые 8 бит

 

Да ё-ж-моё!!! 8-битный интерфейс!!! Читать после 0x8F в ваших 0x8F00 чем будете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Вот хоть убейте…"

" SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b; "

 

Из солёного огурца пристрелить разве что…

 

 

 

Да ё-ж-моё!!! 8-битный интерфейс!!! Читать после 0x8F в ваших 0x8F00 чем будете?

ну хоть на осцилографе правильную картинку увидел))

подскажите как правильно сдвинуть сообщение на первые 8 бит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну хоть на осцилографе правильную картинку увидел))

подскажите как правильно сдвинуть сообщение на первые 8 бит?

Ни фига не правильную! А "сообщение" не двигать, а SPI 8-битный должен быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ни фига не правильную! А "сообщение" не двигать, а SPI 8-битный должен быть.

написал

SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;

теперь 8 импульсов тактирования

 

имеем

 

как же теперь получить ещё 8 тактов на которые должен ответить датчик?

 

кажется что то понял

 

во мой код на отправку и получение, пока что без датчика, просто смотрю что генерит контроллер

 while(1)
 {

  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
  GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2);

  //while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}

  SPI_I2S_SendData(SPI2, 0x8F);
  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);

  //Delay(2);
  for(uint32_t i=0; i<0x000001FF; i++); // время по подачи импульсов на ответ
  SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx); 

  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  uint8_t data = SPI_I2S_ReceiveData(SPI2);
  //Delay(2);
  for(uint32_t i=0; i<0x000000FF; i++); // подолжительность импульсов на ответ
  SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);

  GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);
  Delay(100);
  /*
  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}
  uint8_t data = SPI_I2S_ReceiveData(SPI2);
  */

 }

 

получил

post-87107-1435308736_thumb.png

post-87107-1435310660_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://electronix.ru/forum/index.php?showt...t&p=1347675

 

На приём почему 16бит?

Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://electronix.ru/forum/index.php?showt...t&p=1347675

 

На приём почему 16бит?

на прием не 16, на прием он их генерит пока задержка не кончится, а надо ровно 8? больше нельзя?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...