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

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

Вам можно!!!

 

Данные 8-разрядные, детский сад - штаны на лямках!

 

Убирайте задержки.

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

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


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

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

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

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


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

Не " наложились" а придвинулись; если датчика нет то просто наводка синхроимпульсов на вход.

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

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


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

да они так придвинулись что осталось всего 8 синхроимпульсов)), и на передачу и на прием

а вот эта строка

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

почему то не дает достаточных задержек( заходит 3 раза и пролетает дальше, мерил)

 

 

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

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

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


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

По моему, экспериментов - достаточно; настал момент ещё раз, но медленно и внимательно, прочитать RM0038 (понятно о чём я?) стр.741-767.

Там есть чудесные диаграммы как ведут себя флаги в SPI_SR.

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

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


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

Obam, BooSooV, перечитайте ещё раз правила, особенно п. 3.4

Мне уже надоело править Ваши посты и надеяться, что Вы заметите мои комментарии.

Ещё раз замечу бездумное цитирование - забаню обоих на две недели.

Модератор.

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


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

После долгих мучений перешел на вот такой код

инициализации:

SPI_InitTypeDef SPI_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

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



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

SPI_Init(SPI2,&SPI_InitStructure);

SPI_Cmd(SPI2,ENABLE);

 

 

Обмен данными:

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
SPI2->DR = 0xBC;
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}
uint8_t temp2 = SPI2->DR;
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
GPIO_SetBits(GPIOB, GPIO_Pin_12);

 

Датчик молчит.

а вот что на осциллографе:

 

HEEELP

post-87107-1436770662_thumb.jpg

post-87107-1436770667_thumb.jpg

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


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

делал обмен по такому же интерфейсу(по одному проводу данных) на одной плате, и получилось, все работает вот код:

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

 SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
 SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx); 

 GPIO_ResetBits(GPIOB, GPIO_Pin_4);

 SPI2->DR = 0x07;

 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}
 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {}

 uint8_t temp1 = SPI1->DR;

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

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

 SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);
 SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Tx); 

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

 for(uint32_t i=0; i<0x0000003F; i++); 

 SPI1->DR = 0x04;

 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {}
 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}

 uint8_t temp2 = SPI2->DR;

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

 SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
 SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx);

 GPIO_SetBits(GPIOB, GPIO_Pin_4);while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}
 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}

 SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
 SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx); 

 GPIO_ResetBits(GPIOB, GPIO_Pin_4);

 SPI2->DR = 0x07;

 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}
 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {}

 uint8_t temp1 = SPI1->DR;

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

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

 SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);
 SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Tx); 

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

 for(uint32_t i=0; i<0x0000003F; i++); 

 SPI1->DR = 0x04;

 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {}
 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}

 uint8_t temp2 = SPI2->DR;

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

 SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
 SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx);

 GPIO_SetBits(GPIOB, GPIO_Pin_4);

 

и осцилограммы

И вот вопрос, почему тут вся передача проходит норм а с датчиком нет?

post-87107-1436942244_thumb.jpg

post-87107-1436942249_thumb.jpg

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


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

да хоть так хоть так, все равно ничего не отвечает

 

Ну значит хана датчику, "завоспитыван" отладкой кода.

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


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

Интересно, чем все закончилось)) А то у меня аналогичные проблемы с этим гребаным датчиком (hts221): передаю ему b"10001111" после чего перевожу линию данных на прием, генерю 8 импульсов SCK и ожидаю на шине данных 0xBC. Вместо этого там плавно нарастающий сигнал, который читается как 0xFF. Плавно нарастающий сигнал - это скорее всего колебания напряжения в третьем состоянии (десятые доли вольта), т.е. датчик просто отсутствует как драйвер, как будто неживой.

 

У кого нибудь вообще есть положительный опыт использования этого датчика в режиме SPI?

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


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

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

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

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

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

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

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

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

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

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