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

hd44780

Свой
  • Постов

    1 236
  • Зарегистрирован

  • Посещение

Весь контент hd44780


  1. STM32H743 SPI

    Осциллом 3.3 платы посмотрел - чисто. Может иголки какие, хз, моим хилым UT-81B их фиг найдёшь.
  2. STM32H743 SPI

    Покупал не я, а знакомый. Говорил, вроде где-то в США... Кстати, мы с ним тоже подумали на хреновое питание +3.3в. Я ж подавал на неё 5 вольт, т.е. конечный 3в стабилизатор всё равно работал родной. Стабилизатор завтра осциллом потыкаю, отпишусь. Готовых внешних 3.3в у меня щас нету, спаять внешний стаб смогу только на выходных, т.к. у меня это хобби, в рабочее время я паять не шибко могу. Атоллик после ругани на флэш всё-таки заходит в отладку, но ещё во время блужданий по стартовому коду попадает в DefaultHandler. Т.е. до активации PLL и HSE там дело не доходит. Там действительно что-то странное. Добавил в ту же тестовую прошивку с SPI мигание светодиодиком, залил ST-Link utility - замигал нормально.
  3. STM32H743 SPI

    MasterElectric, удачи. Мои эксприменты, похоже, откладываются - см. вложение. При простом подключении всё прекрасно читает. Ошибка только после Erase. Atollic True Studio тож ругается "flash error". Хз, чё с ней стряслось. Пытался +5в со своего БП подавать, другой программатор подключал - без разницы. Прошивается и работает не знаю с какого раза. 2 недели всего проработала :crying: Если оно всё же будет работать, я тоже буду продолжать изучение всего вышесказанного.
  4. STM32H743 SPI

    Спасибо. Попробую, отпишусь. Родственные сомнения.. Рано ещё этот проц в какие-то серъёзные вещи ставить имхо ... Так, чисто поизучать, поиграться. F1/F4, помню, с полпинка заводилось всё. С SDRAM и LTDC на F439, помню, года 4 назад промучился, но во всём оказалась виновата хреновая разводка платы. Сделали другую - все мгновенно заработало как надо. Тут на форуме даже тема моя есть про "неработающий" LTDC :biggrin: У меня есть свободная QSPI флэшка, думаю, следующими блоками на изучение будут QSPI и уарты :rolleyes: Ну и USB c сетевухой, раз уж они есть на NUCLEO. Не пропадать же добру :biggrin: С сетью и lwIP на МК я вообще никогда не работал. Ну всякие там ESP8266 не в счёт конечно.
  5. STM32H743 SPI

    Задал вроде: SPI_PORT->CR2 = 1; // Передать 1 байт После Enable SPI.
  6. STM32H743 SPI

    Да, со SPE опечатка вышла при вставке кода в форум. Сорри ... Вот полный текст: // Чтение/запись байта SPI uint8_t spi1_sendByte ( uint8_t data_out ) { uint8_t data_in = 0; // Disable SPI CLEAR_BIT( SPI_PORT->CR1, SPI_CR1_SPE); MODIFY_REG(SPI_PORT->CR2, SPI_CR2_TSIZE, 1); // Enable SPI SET_BIT( SPI_PORT->CR1, SPI_CR1_SPE); SPI_PORT->CR2 = 1; // Передать 1 байт // Start transfer SPI_PORT->CR1 |= SPI_CR1_CSTART; while ( !( SPI_PORT -> SR & SPI_SR_TXP ) ); *((__IO uint8_t *)&SPI_PORT->TXDR) = data_out; // Ждать завершения передачи // while ( !(SPI_PORT->SR & SPI_SR_EOT) ); // Ждать завершения приёма while ( !( SPI_PORT -> SR & SPI_SR_RXP ) ); data_in = *((__IO uint8_t *)&SPI_PORT->RXDR); return data_in; } // SPI_sendByte На TXP ни разу не висит, теперь виснет на EOT (если его раскомментарить), либо (если прикрыть EOT) на следующем за ним RXP. Genadi Zawidowski, да, я помню, вы выше писали об этом, но на TXP у меня вобщем-то никогда не висло, а когда и висло, то по факту это оказывалось следствием моих же ошибок/экспериментов. Поэтому пока я проверяю всегда этот флаг.
  7. STM32H743 SPI

    Датчик заработал, всё гуд. Осталось его только на другой SPI перенести. DMA не делал, пока не нужно, тем более, что ещё надо с UART, таймерами и пр. разобраться. Что касается SPI, остался один простой вопрос - как отправить-принять байт SPI простым опросом? Т.е. то что на F1/F4 делается буквально 4-мя строками кода: // Чтение/запись байта SPI uint8_t bme280_sendbyte ( uint8_t data ) { uint8_t _rxbyte; while ( !( SPI2 -> SR & SPI_SR_TXE ) ); SPI2 -> DR = data; while ( !( SPI2 -> SR & SPI_SR_RXNE ) ); _rxbyte = SPI2 -> DR; return _rxbyte; } // SPI_sendbyte Здесь же, если написать // Чтение/запись байта SPI uint8_t spi1_sendByte ( uint8_t data_out ) { uint8_t data_in = 0; // Disable SPI SET_BIT( SPI_PORT->CR1, SPI_CR1_SPE); MODIFY_REG(SPI_PORT->CR2, SPI_CR2_TSIZE, 1); // Enable SPI SET_BIT( SPI_PORT->CR1, SPI_CR1_SPE); SPI_PORT->CR2 = 1; // Передать 1 байт // Start transfer SPI_PORT->CR1 |= SPI_CR1_CSTART; while ( !( SPI_PORT -> SR & SPI_SR_TXP ) ); *((__IO uint8_t *)&SPI_PORT->TXDR) = data_out; // Ждать завершения передачи // while ( !(SPI_PORT->SR & SPI_SR_EOT) ); // Ждать завершения приёма while ( !( SPI_PORT -> SR & SPI_SR_RXP ) ); data_in = *((__IO uint8_t *)&SPI_PORT->RXDR); return data_in; } // SPI_sendByte Оно тупо виснет на первом цикле ожидания единицы в SPI_SR_TXP :( До всего остального просто не доходит. Как это сделать правильно? Повторяю - без прерываний. С прерываниями всё хорошо :) .
  8. STM32H743 SPI

    Лог анализатора у меня нету, только осцилл. Смотрел я им ногу MISO датчика - там действительно тишина. Полярность и фаза у дисплея и у датчика идентичные. Вот мои настройки SPI дисплея и датчика с F103 проца, где всё работает: Дисплей: SPI_Cmd ( SPI1, DISABLE ); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; 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_BaudRatePrescaler = SPI_BaudRatePrescaler_16; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init ( SPI1, &SPI_InitStructure ); SPI_Cmd ( SPI1, ENABLE ); SPI_CalculateCRC ( SPI1, DISABLE ); Датчик: SPI_Cmd ( SPI2, DISABLE ); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; 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_BaudRatePrescaler = SPI_BaudRatePrescaler_16; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init ( SPI2, &SPI_InitStructure ); SPI_Cmd ( SPI2, ENABLE ); SPI_CalculateCRC ( SPI1, DISABLE ); как видно, они идентичные. Попробую ещё настройки пинов сопоставить. У H7 порты, похоже, такие же как и у F4. Этот датчик у меня и на F439 успешно работает, есть с чем сравнивать.
  9. STM32H743 SPI

    MasterElectric , у Вас приём через прерывание нормально работает? У меня странно как-то - эхо (через проводок MOSI - MISO) нормально идёт, а пытаюсь работать с датчиком BME280 - он на команды не реагирует, читаются одни нули. Дисплей (вообще без ноги MISO) тож нормально работает. Дисп отключил, датчик к тем же ногам подключен.
  10. STM32H743 SPI

    Genadi Zawidowski , да, чёт я тупанул, спасибо, помогло.
  11. STM32H743 SPI

    Я просто постепенно делаю. Для простой инициализации дисплея и рисования точек и по одному достаточно. Попробую блоками картинки в дисплей кидать. Ещё напоролся на какой-то странный баг: я работаю в Atollic TrueStudio, когда использовал код MasterElectric while ( SPI_PORT->SR & SPI_SR_RXP != 0 ) { if ( RxBuffPos < TransLength ) { RxBuff[RxBuffPos++] = *(volatile uint8_t *) &(SPI_PORT->RXDR); } // if else break; } // while В цикл вообще не заходило, естетвенно ничего не принимало, хотя под отладкой виден бит SR.RXP==1 и в RXDR правильное принятое значение. Соответственно всё последующее летит к такой-то матери. Переписал так: while ( 1 ) { uint32_t val; val = SPI_PORT->SR; val &= SPI_SR_RXP; if ( val != 0 ) { if ( RxBuffPos < TransLength ) { r_value = RxBuff[RxBuffPos++] = *(volatile uint8_t *) &(SPI_PORT->RXDR); } // if } // if else break; if ( RxBuffPos == TransLength ) break; } // while Те же яйца, вид сбоку. Но работает. Никто не натыкался? Оптимизацию проверял, там None (-O0).
  12. STM32H743 SPI

    Я кое-как скрутил отправку одного байта ... SPI дисплей (без ноги MISO) вроде задышал. На каких-то странных костылях... Сейчас попробую BME280 прикрутить.. Там обмен двунаправленный. PS. Первые впечатления - хрень полная и тихий ужас ....
  13. STM32H743 SPI

    У меня тож самое пока :crying: . Первый байт проходит в песнями, потом виснет на опросе флагов SR.
  14. STM32H743 SPI

    Угу, спасибо. Я тоже буду отписываться, если что-то новое появится.
  15. STM32H743 SPI

    Что-то я совсем запутался :( Некий прогресс есть, хоть и неполный. 1. Переписал инициализацию на регистрах: CLEAR_BIT( SPI_PORT->CR1, SPI_CR1_SPE); // Disable SPI SPI_PORT -> CR1 = SPI_CR1_SSI; // SSI := 1 SPI_PORT -> CR2 = 0x0; SPI_PORT -> CFG1 = SPI_CFG1_MBR | SPI_CFG1_DSIZE_2 | SPI_CFG1_DSIZE_1 | SPI_CFG1_DSIZE_0; // MBR = 7 - clock/256; DSIZE = 0111 - 8 bit/frame SPI_PORT -> CFG2 = SPI_CFG2_AFCNTR | SPI_CFG2_SSM | SPI_CFG2_CPOL | SPI_CFG2_CPHA | SPI_CFG2_MASTER; // Enable SPI peripheral SET_BIT( SPI_PORT->CR1, SPI_CR1_SPE); работает, проблем пока вроде не заметил, если так можно выразиться в свете нижеследующих пунктов.... от хала оставил только вот это hnucleo_Spi.Instance = SPI_PORT; hnucleo_Spi.State = HAL_SPI_STATE_READY; потому что без него отправка байтов халовской функцией подыхает на взлёте. Инит пинов SPI оставил пока на хале, дабы резать колбасу по кусочкам: // SPI pins GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 2. Дисплей пока отключил, убрал в сторонку, не дорос я до него :biggrin: . Замкнул MISO-MOSI проводком, т.е. просто эхо. Пытаюсь передать байт: хал: // Чтение/запись байта SPI uint8_t ili9162_sendByte ( uint8_t data_out ) { uint8_t data_in; HAL_StatusTypeDef status = HAL_SPI_TransmitReceive(&hnucleo_Spi, &data_out, &data_in, 1, 1000); return data_in; Байт по кольцу гоняет, т.е. возвращает то, что я и отправляю. Типа нормально. закомментариваю хал, пишу на регистрах: // Чтение/запись байта SPI uint8_t ili9162_sendByte ( uint8_t data_out ) { uint8_t data_in; MODIFY_REG(SPI_PORT->CR2, SPI_CR2_TSIZE, 1); // Передача while ( !( SPI_PORT -> SR & SPI_SR_TXP ) ); *((__IO uint8_t *)&SPI1->TXDR) = data_out; SET_BIT ( SPI_PORT->CR1, SPI_CR1_CSTART ); // Приём while ((SPI1->SR & (SPI_SR_RXWNE | SPI_SR_RXPLVL)) == 0); data_in = *((__IO uint8_t *)&SPI_PORT->RXDR); return data_in; 2 байта передаёт-принимает нормально, на третьем виснет на условии приёма. Единственное отличие здесь от хала это то, что HAL_SPI_TransmitReceive постоянно включает/выключает SPI и MODIFY_REG(SPI1->CR2, SPI_CR2_TSIZE, Size); делает при выключенном SPI. Неужели это необходимо? Попробовал включать-выключать SPI - стало ещё хуже - один байт передал и завис .. 3. К слову о периферийных SPI-девайсах. Тут вообще всё плачевно. Вышеупоминавшийся дисплей вообще не инитится, пробовал подключать датчик BME280 (SPI интерфейс) - вместо ID (который равен 60h) читает одни нули, хотя на всяких там F1/F4 как положено 60h и датчик работает с песнями. Эта хрень даже с халовской HAL_SPI_TransmitReceive, которая эхо исправно делает. Помогите разобраться плиз. Такое чувство, что я где-то на одни и те же грабли наступаю ... Рабочий драйвер для BME280 (SPI) могу выложить если кому интересно. По I2C я его ни разу нигде не запускал, пока не нужно. Код уважаемого Genadi Zawidowski смотрел, но, видимо, чего-то недопонял, т.к. тоже повис на приёме байта если правильно помню :( .
  16. Не понял. Вы ж знаете когда вы включили ключ, а когда выключили его. Плюс ещё можете OUT опрашивать, хотя лично я этого не делал.
  17. Да, никакого AF не надо. Простой GPIO out. Как для светодиодика.
  18. У вас есть pull-up на EN. Значит, когда Вы сотрёте проц полностью кнопкой Erase, питание должно пропасть. Это происходит? PA8 я никогда не использовал, не подскажу. PS. Сейчас просмотрел все свои схемы c USB хостом - везде этим ключом рулит PA10.
  19. Вопрос задан непонятно. Если к Вашему устройству подключена, например, USB-флэшка и Вы хотите программно отключать ей питание, то используйте что-то типа STMPS2141STR.
  20. STM32H743 SPI

    С C/D и nCS всё в порядке: void ILI9163writecommand(uint8_t c) { res_rs ( ); //low res_cs ( ); //low ili9162_sendByte ( c ); set_cs ( ); //hi } void ILI9163writedata(uint8_t c) { set_rs ( ); //hi res_cs ( ); //low ili9162_sendByte ( c ); set_cs ( ); //hi } Вопрос только в отправке байта ..
  21. STM32H743 SPI

    Судя по осциллу SPI и его ноги ожили. Долбаный хал с его callback-ами. Угу, гляну, может там надо как-то ждать реального ухода байта в дисп, иначе он его не воспринимает. Там сразу после отправки CS поднимается в 1. Если поднимется раньше реального ухода байта из всех этих очередей проца, то дисп его не воспримет ...
  22. STM32H743 SPI

    Привет всем. Попал тут в руки проц STM32H743 в виде платы NUCLEO-H743I. Разобрался, как запустить его на все 400 МГц, Systick завёл, светодиодиками помигал - все это заработало. Частоту систика проверил осциллом. Перешёл к SPI (маленький дисплейчик ILI9163). Сам дисп рабочий, работал на Ф103. Драйвер диспа собственно оттуда же. Драйвер разделён на 2 части - низкоуровневая (работа с SPI и ногами) и т.н. высокоуровневая (пуляние в дисп команд, отрисовка точек, знакогенератор и пр). Соответственно в адаптации нуждается только низкоуровневая часть, т.к. высокоуровневая напрямую в ноги и SPI не лезет. С ногами nCS, nRESET и пр. ногодрыгом я управился, они работают нормально, а с SPI затык - синхра идёт исправно, а из ноги MOSI упорно прёт ноль. Нога MISO в данном случае не нужна вообще, т.к. у дисплея её нет. Пишу на помеси из регистров и кубового хала. М.б. это и нехорошо, но с ходу писать на регистрах на проце, которого раньше в глаза не видел как-то нехорошо. Инит пинов: // Configure PA5 - SPI1 SCK GPIO_InitStruct.Pin = GPIO_PIN_5; // SCK GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* // Configure PA7 - SPI1 MOSI // Configure PB5 - SPI1 MOSI // Configure PD7 - SPI1 MOSI GPIO_InitStruct.Pin = GPIO_PIN_7; // MOSI // GPIO_InitStruct.Pin = GPIO_PIN_5; // MOSI GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // GPIO_InitStruct.Pull = GPIO_PULLUP; // GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; // HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); */ // PA7 - SPI1 MOSI // MODER - AF = 10 GPIOA->MODER |= GPIO_MODER_MODER5_1; // 10 // TYPER - PP = 0 - Push-pull GPIOA->OTYPER |= GPIO_OTYPER_IDR_7; // 0 // SPEEDR - OSPEEDRy = 11 GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7; // 11 // PUPD_R = 10 - Pull-down GPIOA->PUPDR |= GPIO_PUPDR_PUPDR7_1; // 10 Нога PA5 (SCK) работает как угодно - хоть халом её инитить, хоть чем. PA7 (MOSI) - не работает никак. Инитил по-разному. Инит SPI (в основном хал): /*** Configure the SPI peripheral ***/ SPI_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SPI123; SPI_PeriphClkInit.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL; HAL_RCCEx_PeriphCLKConfig(&SPI_PeriphClkInit); /* Enable SPI clock */ // __HAL_RCC_SPI1_CLK_ENABLE(); // SET_BIT (RCC->APB2ENR, RCC_APB2ENR_SPI1EN); RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // SPI Config hnucleo_Spi.Instance = SPI_PORT; // hnucleo_Spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hnucleo_Spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; hnucleo_Spi.Init.Direction = SPI_DIRECTION_2LINES; // hnucleo_Spi.Init.Direction = SPI_DIRECTION_2LINES_TXONLY; hnucleo_Spi.Init.CLKPhase = SPI_PHASE_2EDGE; hnucleo_Spi.Init.CLKPolarity = SPI_POLARITY_HIGH; hnucleo_Spi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hnucleo_Spi.Init.CRCPolynomial = 7; hnucleo_Spi.Init.DataSize = SPI_DATASIZE_8BIT; hnucleo_Spi.Init.FirstBit = SPI_FIRSTBIT_MSB; hnucleo_Spi.Init.NSS = SPI_NSS_SOFT; hnucleo_Spi.Init.TIMode = SPI_TIMODE_DISABLE; hnucleo_Spi.Init.Mode = SPI_MODE_MASTER; hnucleo_Spi.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE; /* Recommended setting to avoid glitches */ hnucleo_Spi.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA; hnucleo_Spi.Init.CRCLength = SPI_CRC_LENGTH_8BIT; hnucleo_Spi.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; hnucleo_Spi.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; hnucleo_Spi.Init.NSSPolarity = SPI_NSS_POLARITY_LOW; hnucleo_Spi.Init.NSSPMode = SPI_NSS_PULSE_DISABLE; hnucleo_Spi.Init.MasterSSIdleness = 0x00000000; hnucleo_Spi.Init.MasterInterDataIdleness = 0x00000000; hnucleo_Spi.Init.MasterReceiverAutoSusp = 0x00000000; HAL_SPI_Init(&hnucleo_Spi); // Enable SPI peripheral SET_BIT( SPI_PORT->CR1 , SPI_CR1_SPE); SPI_PORT === SPI1. Отправка байта в SPI1 (хал): // Чтение/запись байта SPI void ili9162_sendByte ( uint8_t data ) { /* // Длина передаваемых байт - 1 MODIFY_REG (SPI1->CR2, SPI_CR2_TSIZE, 1); // Старт передачи SET_BIT(SPI1->CR1, SPI_CR1_CSTART); while ( !( SPI1 -> SR & SPI_SR_TXP ) ); SPI1 ->TXDR = data; // Ждать завершения передачи // while ( ! ( SPI1 -> SR & SPI_SR_TXC ) ); */ uint8_t data_in; HAL_StatusTypeDef status = HAL_OK; status = HAL_SPI_TransmitReceive(&hnucleo_Spi, &data_in, &data, 1, 1000); } // SPI_sendByte Моя поделка на регистрах не пашет вообще, я пока бросил, оставил хал. Проверяю всё это вызовом в вечном цикле ili9162_sendByte ( 0xAA ); В чём может быть дело? Если надо, выложу весь проект на 9 атоллике. Спасибо.
  23. Да, как-нибудь гляну ...
  24. Дисплей и отладка есть, Слава Богу. В общем после правок множителей всё завелось. WAV и FLAC немного подвывали, решилось увеличением частоты SPI. Получившиеся настройки таковы: SC_MULT = x4.5 SC_ADD = x2.0 Соответственно, CLOCKF = 0xC000 | 0x1800 | 0x0430. Единственное, что не пошло, это WMA. Тишина полная, хотя файл проверенный. Ну да фиг с ним, я ими не пользуюсь, сделал пару штук исключительно для проверки этих чипов. Jury093, спасибо Вам огромное.
×
×
  • Создать...