|
STM32L100 + HTS221 |
|
|
|
Jun 11 2015, 05:52
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 10-06-15
Пользователь №: 87 107

|
Здравствуйте, есть проблема, надо подключить HTS221(датчик температуры и влажности) к STM32L100. Схема соеденения: HTS221 SCL --------- PB13(SCK2) STM32L100 ................RDY---------PC6(RDY2) ................SDA---------PB15(MOSI2) ................CS------------PB12(CS2) Схема соединения изменению не подлежит. Инициализация SPI 2: CODE #define GPIO_Pin_NSS2 GPIO_Pin_12 // NSS (CS) #define GPIO_Pin_SCK2 GPIO_Pin_13 // SCK #define GPIO_Pin_MISO2 GPIO_Pin_14 // MISO #define GPIO_Pin_MOSI2 GPIO_Pin_15 // MOSI #define GPIOSPI2 GPIOB
#define GPIO_PinSourceSCK2 GPIO_PinSource13 #define GPIO_PinSourceMISO2 GPIO_PinSource14 #define GPIO_PinSourceMOSI2 GPIO_PinSource15
// -- Инициализация GPIO для SPI2 ---------------------------------------------- void init_GPIO_for_SPI2() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure2;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); // Запуск необходимых GPIO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_SCK2 | GPIO_Pin_MISO2 | GPIO_Pin_MOSI2; GPIO_Init(GPIOSPI2, &GPIO_InitStructure); // нога NSS(CS2). она управляется программно, ПОЭТОМУ // она конфигурируется как выход GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_40MHz; GPIO_InitStructure2.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure2.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_NSS2; GPIO_Init(GPIOSPI2, &GPIO_InitStructure2);
// Настраиваем ноги SPI2 для работы в режиме альтернативной функции GPIO_PinAFConfig(GPIOSPI2, GPIO_PinSourceSCK2, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOSPI2, GPIO_PinSourceMISO2, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOSPI2, GPIO_PinSourceMOSI2, GPIO_AF_SPI2); GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2); }
// -- Инициализация SPI2 ------------------------------------------------------- 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_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b; 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); }
Чтение регистра датчика: Код uint8_t cmd = 0x4F;
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, cmd);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {} uint8_t data = SPI_I2S_ReceiveData(SPI2); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {} SPI_I2S_SendData(SPI2, 0x00);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {} data = SPI_I2S_ReceiveData(SPI2);
GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2); по идее должен выдать свое имя Такая схема у меня работала на другом SPI но там было MOSI И MISO разными проводами, а тут все в одном, что делать не знаю пробовал поставить в инициализации SPI_Direction_1Line_Tx, но тогда мы не можем считать, а насколько я понимаю мы должны сначала прислать адрес ячейки а потом считать инфу, и все по одному проводу. Объясните пожалуйста что не так, и как заставить работать.
Сообщение отредактировал IgorKossak - Jun 11 2015, 05:59
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
 |
Ответов
|
Jun 26 2015, 07:11
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 10-06-15
Пользователь №: 87 107

|
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. Вот выдержка из даташита, которая говорит тоже самое Можно как то настроить чтобы он не по возрастанию читал линию данных а по падению
|
|
|
|
Сообщений в этой теме
BooSooV STM32L100 + HTS221 Jun 11 2015, 05:52 SasaVitebsk А SDA не наводит на мысль что интерфейс I2C? И как... Jun 11 2015, 06:06 BooSooV Цитата(SasaVitebsk @ Jun 11 2015, 06:06) ... Jun 11 2015, 06:12 Obam Цитата(BooSooV @ Jun 11 2015, 09:52) Здра... Jun 11 2015, 06:23 RabidRabbit Таки читайте внимательней рефренс-мануал на STM32L... Jun 11 2015, 06:24 BooSooV Цитата(RabidRabbit @ Jun 11 2015, 06:24) ... Jun 11 2015, 06:27  Obam Если есть half-duplex, то не слушайте, а если нет,... Jun 11 2015, 06:45 BooSooV прочитал 28.3.4 Configuring the SPI for half-duple... Jun 11 2015, 07:14 RabidRabbit SPI_CR1_BIDIMODE - CR1 - это номер регистра, а не ... Jun 11 2015, 07:24 Obam Цитата(RabidRabbit @ Jun 11 2015, 11:24) ... Jun 11 2015, 07:41 BooSooV уважаемые электроники, я так и не понял что мне на... Jun 11 2015, 08:12  Obam Цитата(BooSooV @ Jun 11 2015, 12:12) уваж... Jun 11 2015, 08:23   BooSooV Цитата(Obam @ Jun 11 2015, 08:23) Да
спас... Jun 11 2015, 08:36 BooSooV Здравствуйте, я опять с вопросами, написал код кот... Jun 24 2015, 05:57 Obam Цитата(BooSooV @ Jun 24 2015, 09:57) Здра... Jun 24 2015, 06:33  BooSooV Цитата(Obam @ Jun 24 2015, 06:33) Здравст... Jun 24 2015, 06:42   Obam Цитата(BooSooV @ Jun 24 2015, 10:42) Осци... Jun 24 2015, 06:44    BooSooV Цитата(Obam @ Jun 24 2015, 06:44) Обратно... Jun 24 2015, 06:53     Obam Цитата(BooSooV @ Jun 24 2015, 10:53) ниче... Jun 24 2015, 07:07      BooSooV Цитата(Obam @ Jun 24 2015, 07:07) Зацикли... Jun 24 2015, 07:25       Obam Цитата(BooSooV @ Jun 24 2015, 11:25) Посм... Jun 24 2015, 07:26        BooSooV Цитата(Obam @ Jun 24 2015, 07:26) Очень х... Jun 24 2015, 07:40 Obam "…Мойша The Beatles напел…"
Синхроимпу... Jun 24 2015, 07:59 BooSooV Цитата(Obam @ Jun 24 2015, 07:59) "…... Jun 24 2015, 08:12  Obam Цитата(BooSooV @ Jun 24 2015, 12:05) но н... Jun 24 2015, 08:13 BooSooV надо писать 8F == 10001111
1 = читаю
0 = без сдвиг... Jun 24 2015, 08:15 Obam Кроме того, если нет записи, по-вашему, 11110010b ... Jun 24 2015, 08:20 BooSooV Цитата(Obam @ Jun 24 2015, 08:20) Кроме т... Jun 24 2015, 08:25 Obam И из DR читается 0xFF?
Повторяемость результата ес... Jun 24 2015, 08:38 BooSooV Цитата(Obam @ Jun 24 2015, 08:32) И из DR... Jun 24 2015, 08:40  Obam Цитата(BooSooV @ Jun 24 2015, 12:40) что ... Jun 24 2015, 08:50   BooSooV Пойдем по списку))
смотрел на прямую DR, пишу в не... Jun 24 2015, 09:22    Obam Стоять!!!!! Назад!!... Jun 24 2015, 09:54     BooSooV AD5 AD4.....AD0 они ведь идут задом наперед, не на... Jun 25 2015, 05:32 Obam Шутки шутками, но доку (DS на датчик и контроллер ... Jun 25 2015, 07:02 BooSooV увидел только что одну проблему, мой код почему то... Jun 25 2015, 07:36 Obam CODE
SPI2->CR1 |= SPI_CR1_BIDIOE; //BIDIOE пере... Jun 25 2015, 07:49 BooSooV Ну откуда??? 8 синхроимпульсов от "SPI2->D... Jun 25 2015, 08:05  Obam Цитата(BooSooV @ Jun 25 2015, 12:05) если... Jun 25 2015, 08:35   BooSooV Цитата(Obam @ Jun 25 2015, 08:35) • 8- or... Jun 26 2015, 06:35 Obam А что не так?
00101010b==0x2A старшим битом вперё... Jun 26 2015, 06:48 BooSooV Меня смущает то, что в даташите на датчик, начало ... Jun 26 2015, 07:03  Obam Цитата(BooSooV @ Jun 26 2015, 11:03) Меня... Jun 26 2015, 07:13   BooSooV Цитата(Obam @ Jun 26 2015, 07:13) Данные ... Jun 26 2015, 07:29    Obam Цитата(BooSooV @ Jun 26 2015, 11:29) Похо... Jun 26 2015, 07:37     BooSooV Цитата(Obam @ Jun 26 2015, 07:37) Какой с... Jun 26 2015, 08:00 Obam "но у меня выставлен формат данных 8, и вроде... Jun 26 2015, 07:05 BooSooV Цитата(Obam @ Jun 26 2015, 07:05) "н... Jun 26 2015, 07:14 Obam Ну что?
SPI2->CR1 |= SPI_CR1_CPOL; //исходное ... Jun 26 2015, 07:29 BooSooV сейчас сделаю)) посмотрим что будет Jun 26 2015, 07:33 Obam Это одна команда SPI2->DR = 0x8F?
Вот что хотит... Jun 26 2015, 08:02 BooSooV Цитата(Obam @ Jun 26 2015, 08:02) Это одн... Jun 26 2015, 08:13 Obam "Вот хоть убейте…"
" SPI_InitStruct... Jun 26 2015, 08:22 BooSooV Цитата(Obam @ Jun 26 2015, 08:22) "В... Jun 26 2015, 08:30  Obam Цитата(BooSooV @ Jun 26 2015, 12:30) ну х... Jun 26 2015, 08:33   BooSooV Цитата(Obam @ Jun 26 2015, 08:33) Ни фига... Jun 26 2015, 09:24 Obam http://electronix.ru/forum/index.php?showt...t... Jun 26 2015, 09:25 BooSooV Цитата(Obam @ Jun 26 2015, 09:25) http://... Jun 26 2015, 09:30  Obam Цитата(BooSooV @ Jun 26 2015, 13:30) на п... Jun 26 2015, 09:35   BooSooV убрал, сигналы наложились, в линии тактирования 8 ... Jun 26 2015, 10:01    Obam Не " наложились" а придвинулись; если да... Jun 26 2015, 10:08     BooSooV да они так придвинулись что осталось всего 8 синхр... Jun 26 2015, 10:19      Obam По моему, экспериментов - достаточно; настал момен... Jun 26 2015, 10:40 IgorKossak Obam, BooSooV, перечитайте ещё раз правила, особен... Jun 26 2015, 17:09 BooSooV После долгих мучений перешел на вот такой код
иниц... Jul 13 2015, 06:58 Obam Не 0xBC, а 0x8F ! Число 0xBC дожно быть возвра... Jul 14 2015, 08:26 BooSooV да хоть так хоть так, все равно ничего не отвечает Jul 15 2015, 05:22 Obam Цитата(BooSooV @ Jul 15 2015, 09:22) да х... Jul 15 2015, 07:58 BooSooV делал обмен по такому же интерфейсу(по одному пров... Jul 15 2015, 06:39 RoadRunner Интересно, чем все закончилось)) А то у меня анало... Sep 28 2015, 08:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|