Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба на прием не 16, на прием он их генерит пока задержка не кончится, а надо ровно 8? больше нельзя? Вам можно!!! Данные 8-разрядные, детский сад - штаны на лямках! Убирайте задержки. Изменено 26 июня, 2015 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба убрал, сигналы наложились, в линии тактирования 8 тактов, а в канале данных теже такты только раз в 5 меньше по вольтажу Изменено 26 июня, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба Не " наложились" а придвинулись; если датчика нет то просто наводка синхроимпульсов на вход. Изменено 26 июня, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба да они так придвинулись что осталось всего 8 синхроимпульсов)), и на передачу и на прием а вот эта строка while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {} почему то не дает достаточных задержек( заходит 3 раза и пролетает дальше, мерил) ведь импульсов то должно быть все равно 16 Изменено 26 июня, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба По моему, экспериментов - достаточно; настал момент ещё раз, но медленно и внимательно, прочитать RM0038 (понятно о чём я?) стр.741-767. Там есть чудесные диаграммы как ведут себя флаги в SPI_SR. Изменено 26 июня, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба Obam, BooSooV, перечитайте ещё раз правила, особенно п. 3.4 Мне уже надоело править Ваши посты и надеяться, что Вы заметите мои комментарии. Ещё раз замечу бездумное цитирование - забаню обоих на две недели. Модератор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 13 июля, 2015 Опубликовано 13 июля, 2015 · Жалоба После долгих мучений перешел на вот такой код инициализации: 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 14 июля, 2015 Опубликовано 14 июля, 2015 · Жалоба Не 0xBC, а 0x8F ! Число 0xBC дожно быть возвращено датчиком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 15 июля, 2015 Опубликовано 15 июля, 2015 · Жалоба да хоть так хоть так, все равно ничего не отвечает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 15 июля, 2015 Опубликовано 15 июля, 2015 · Жалоба делал обмен по такому же интерфейсу(по одному проводу данных) на одной плате, и получилось, все работает вот код: 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); и осцилограммы И вот вопрос, почему тут вся передача проходит норм а с датчиком нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 15 июля, 2015 Опубликовано 15 июля, 2015 · Жалоба да хоть так хоть так, все равно ничего не отвечает Ну значит хана датчику, "завоспитыван" отладкой кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RoadRunner 0 28 сентября, 2015 Опубликовано 28 сентября, 2015 · Жалоба Интересно, чем все закончилось)) А то у меня аналогичные проблемы с этим гребаным датчиком (hts221): передаю ему b"10001111" после чего перевожу линию данных на прием, генерю 8 импульсов SCK и ожидаю на шине данных 0xBC. Вместо этого там плавно нарастающий сигнал, который читается как 0xFF. Плавно нарастающий сигнал - это скорее всего колебания напряжения в третьем состоянии (десятые доли вольта), т.е. датчик просто отсутствует как драйвер, как будто неживой. У кого нибудь вообще есть положительный опыт использования этого датчика в режиме SPI? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться