реклама на сайте
подробности

 
 
> STM32L100 + HTS221
BooSooV
сообщение Jun 11 2015, 05:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BooSooV
сообщение Jun 11 2015, 07:14
Сообщение #2


Участник
*

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



прочитал 28.3.4 Configuring the SPI for half-duplex communication
поискал в системных файлах халф дуплекс но нашел только такие конфигурации:
файл stm32l1xx_spi.h
CODE
/** @defgroup SPI_data_direction
* @{
*/

#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000)
#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400)
#define SPI_Direction_1Line_Rx ((uint16_t)0x8000)
#define SPI_Direction_1Line_Tx ((uint16_t)0xC000)
#define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \
((MODE) == SPI_Direction_2Lines_RxOnly) || \
((MODE) == SPI_Direction_1Line_Rx) || \
((MODE) == SPI_Direction_1Line_Tx))
/**

у меня не полу дуплекса или я что то не понял?

нашел ещё один сомнительный момент в коде
CODE
/******************* Bit definition for SPI_CR1 register ********************/
#define SPI_CR1_CPHA ((uint16_t)0x0001) /*!< Clock Phase */
#define SPI_CR1_CPOL ((uint16_t)0x0002) /*!< Clock Polarity */
#define SPI_CR1_MSTR ((uint16_t)0x0004) /*!< Master Selection */

#define SPI_CR1_BR ((uint16_t)0x0038) /*!< BR[2:0] bits (Baud Rate Control) */
#define SPI_CR1_BR_0 ((uint16_t)0x0008) /*!< Bit 0 */
#define SPI_CR1_BR_1 ((uint16_t)0x0010) /*!< Bit 1 */
#define SPI_CR1_BR_2 ((uint16_t)0x0020) /*!< Bit 2 */

#define SPI_CR1_SPE ((uint16_t)0x0040) /*!< SPI Enable */
#define SPI_CR1_LSBFIRST ((uint16_t)0x0080) /*!< Frame Format */
#define SPI_CR1_SSI ((uint16_t)0x0100) /*!< Internal slave select */
#define SPI_CR1_SSM ((uint16_t)0x0200) /*!< Software slave management */
#define SPI_CR1_RXONLY ((uint16_t)0x0400) /*!< Receive only */
#define SPI_CR1_DFF ((uint16_t)0x0800) /*!< Data Frame Format */
#define SPI_CR1_CRCNEXT ((uint16_t)0x1000) /*!< Transmit CRC next */
#define SPI_CR1_CRCEN ((uint16_t)0x2000) /*!< Hardware CRC calculation enable */
#define SPI_CR1_BIDIOE ((uint16_t)0x4000) /*!< Output enable in bidirectional mode */
#define SPI_CR1_BIDIMODE ((uint16_t)0x8000) /*!< Bidirectional data mode enable */

/******************* Bit definition for SPI_CR2 register ********************/
#define SPI_CR2_RXDMAEN ((uint8_t)0x01) /*!< Rx Buffer DMA Enable */
#define SPI_CR2_TXDMAEN ((uint8_t)0x02) /*!< Tx Buffer DMA Enable */
#define SPI_CR2_SSOE ((uint8_t)0x04) /*!< SS Output Enable */
#define SPI_CR2_FRF ((uint8_t)0x08) /*!< Frame format */
#define SPI_CR2_ERRIE ((uint8_t)0x20) /*!< Error Interrupt Enable */
#define SPI_CR2_RXNEIE ((uint8_t)0x40) /*!< RX buffer Not Empty Interrupt Enable */
#define SPI_CR2_TXEIE ((uint8_t)0x80) /*!< Tx buffer Empty Interrupt Enable */



#define SPI_CR1_BIDIMODE ((uint16_t)0x8000) /*!< Bidirectional data mode enable */
в даташите написано 1 clock and 1 bidirectional data wire (BIDIMODE=1)
а на SPI2 нету BIDIMODE, только на SPI1 значит ли это что на SPI2 нуту полу дуплекса?

Полу дуплекса двунаправленного мне именно двунаправленность на одном проводе нужна
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 04:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016