|
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] - для короткого!!!
|
|
|
|
Сообщений в этой теме
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 BooSooV The first bit (bit 0) starts at the first falling ... Jun 26 2015, 07:11 Obam Цитата(BooSooV @ Jun 26 2015, 11:11) The ... Jun 26 2015, 07:17 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
|
|
|