Умножитель частоты шагов на STM32

Контроллеры, драйверы, датчики, управляющие устройства.

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение michael-yurov » 10 дек 2016, 22:04

MX_Master писал(а):2-я версия CoIDE настолько поменялась в сравнении с 1.Х.Х, что без пузыря не разобраться.

Я до сих пор не разобрался.
Уже несколько заходов делал.
Каждый раз заканчивалось нелитературным выводом.
К сожалению, не пью. Может быть пузырь и помог бы.

MX_Master писал(а): Найти, выбрать и настроить софт для разработки - целая головомойка. Пробовал Keil, IAR-EWARM, CoIDE V2. Дольше всех мучал связку "CoIDE_V2Beta + GNU ARM Embedded Toolchain + ST Link Utility".

Я так и не выбрал.
Пользуюсь первым CooCox-ом, но понимаю, что нужно от него уходить.

Ситуацию усугубляет CubeMX со своими HAL библиотеками.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 10536
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 4082
Медальки:
Настоящее имя: Михаил Львович

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение AndyBig » 10 дек 2016, 22:11

А что в IAR настраивать? Выбрал нужный контроллер и пиши программу :)
Аватара пользователя
AndyBig
Мастер
 
Сообщения: 3874
Зарегистрирован: 07 мар 2014, 04:01
Откуда: юг России
Репутация: 1056
Медальки:

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение selenur » 10 дек 2016, 23:58

Я раньше кейлом пользовался, но интерфейс среды разработки удручал, пока не нашел вот такой плагин: http://visualgdb.com/tutorials/arm/stm32/
Теперь в одной среде разработки можно программировать и отлаживать не только программы по винду, но и под STM, отладка на удивление работает нормально, но плагин платный, но не дорогой ;-)
Есть возможность импортировать проект сформированный CubeMX.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 3713
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1299
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение UAVpilot » 11 дек 2016, 00:58

Скачай CubeMX, создай новый проект на основе любой demoboard и сгенери результат - при генерации
будут предложены варианты IDE под которые генерить, вот любой из них и ставь.

CoIDE уж точно не стоит ставить - оно заточено под библиотеку, которую ST уже похоронил.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение MX_Master » 11 дек 2016, 12:41

Как я понял, куда не плюнь, везде IDE идут на основе Eclipse. Попробовал до кучи winIDEA Open и Atollic TrueSTUDIO. У последнего порог вхождения ниже, зато отладка платная.

В итоге вышел на бесплатный SW4STM32. Весьма низкий порог вхождения - сел и поехал. На борту имеем стандартную библиотеку периферии (StdPeriph) и Cube HAL - отмечаем требуемое при создании проекта. Можно, канеш, ничего не подключать, получится голый проект для хардкорщиков. На выбор все стандартные макетки с STM32. Немного фоток для желающих попробовать..

Умножитель частоты шагов на STM32 2016-12-11_151311.png
Умножитель частоты шагов на STM32 2016-12-11_151606.png
Умножитель частоты шагов на STM32 2016-12-11_151957.png
Умножитель частоты шагов на STM32 2016-12-11_151453.png
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение michael-yurov » 11 дек 2016, 15:53

UAVpilot писал(а):Скачай CubeMX, создай новый проект на основе любой demoboard и сгенери результат - при генерации
будут предложены варианты IDE под которые генерить, вот любой из них и ставь.

Правильная мысль. В голову пока еще не приходила, т.к. после года попыток разобраться, что же такое HAL, и как с ним работать - уже не осталось сил на поиск новой среды разработки.

UAVpilot писал(а):CoIDE уж точно не стоит ставить - оно заточено под библиотеку, которую ST уже похоронил.

UAVpilot говорит, что давно пора переходить на HAL.

staltech писал(а):Все равно какая среда, только без КАЛА!!!
В КАЛЕ шаг вправо или влево и потеря недели времени гарантирована, возможно еще и напрасно.

staltech говорит наоборот.

Я несколько раз пытался создать основу проекта используя CubeMX с его HAL библиотеками.
Пока делаешь что-то простое - компилируется.
Как доходит дело до инициализации сложной периферии - не могу скомпилировать.
И в статусном окне система не объясняет где возникает ошибка и что ей не нравится.
Просто че-нибудь вроде "ошибка компилирования".
Несколько дней пытался создать базу для проекта с USB COM портом, SPI, UART, энкодерами и несколькими таймерами.
В итоге не смог даже один единственный USB поднять.

А со стандартными библиотеками получилось за несколько часов.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 10536
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 4082
Медальки:
Настоящее имя: Михаил Львович

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение staltech » 11 дек 2016, 16:10

michael-yurov писал(а):Пока делаешь что-то простое - компилируется.
Как доходит дело до инициализации сложной периферии - не могу скомпилировать.
И в статусном окне система не объясняет где возникает ошибка и что ей не нравится.
Просто че-нибудь вроде "ошибка компилирования".
Несколько дней пытался создать базу для проекта с USB COM портом, SPI, UART, энкодерами и несколькими таймерами.
В итоге не смог даже один единственный USB поднять.

А со стандартными библиотеками получилось за несколько часов.


Я не хочу навязывать свое мнение. Но при последней попытке пару недель назад использовать HAL у меня вообще часть кода не работала при этом компиляция без ошибок. Настройки оптимизации и прочие танцы с бубном пофиг абсолютно. Ковырять ASM желания не возникло, потому что у меня с халом это не в первый раз.
Как и писал Михаил на стандартных библиотеках завел код без проблем.
С меня этого ХАЛА хватит, хотя соглашусь с тем что простые поделки на нем писать будет проще, цель ХАЛА насколько помню было упрощение переносимости кода между сериями контроллеров STM.
Аватара пользователя
staltech
Мастер
 
Сообщения: 544
Зарегистрирован: 01 июл 2016, 22:50
Откуда: Пензенская обл., г. Никольск
Репутация: 153
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение staltech » 11 дек 2016, 16:23

michael-yurov писал(а):UAVpilot писал(а):
Скачай CubeMX, создай новый проект на основе любой demoboard и сгенери результат - при генерации
будут предложены варианты IDE под которые генерить, вот любой из них и ставь.

Правильная мысль. В голову пока еще не приходила, т.к. после года попыток разобраться, что же такое HAL, и как с ним работать - уже не осталось сил на поиск новой среды разработки.


Я так пробовал, после внесения небольших добавлений в проект, используя исключительно HAL проект упал. Что было связано с энкодерами. После этого переписал инициализацию вручную и все заработало стабильно. К сожалению опыт пока что печальный.
Может кто покажет живой пример как этого зверя победить, только на чем то реальном? ;)
Аватара пользователя
staltech
Мастер
 
Сообщения: 544
Зарегистрирован: 01 июл 2016, 22:50
Откуда: Пензенская обл., г. Никольск
Репутация: 153
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение UAVpilot » 11 дек 2016, 16:42

Странно, почему у меня всё замечательно компилится и работает?.. Может потому, что не ленюсь читатать документацию?.. :)
Например нынешний проект: usb hid, виртуальный com, клавиатура, 2 spi, 2 usart, can, i2c, 2 энкодера, adc, куча таймеров, rtos - всё с использованием hal.
А старые библиотеки более не поддерживаются, баги не фиксятся, обновления не выпускаются, новые камни не поддерживаются.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение staltech » 11 дек 2016, 18:04

UAVpilot писал(а):Странно, почему у меня всё замечательно компилится и работает?.. Может потому, что не ленюсь читатать документацию?..

Я не отказываюсь, что не умею его (HAL) готовить :) Помнишь когда после Ubuntu 10.04 Gmome2 выкатили Unity... Иногда подбешивает этот маркетинг. Пока просто перешел на другие микроконтроллеры.
UAVpilot писал(а):Например нынешний проект: usb hid, виртуальный com, клавиатура, 2 spi, 2 usart, can, i2c, 2 энкодера, adc, куча таймеров, rtos - всё с использованием hal.

Это та платка что недавно на фотке мелькала?
Аватара пользователя
staltech
Мастер
 
Сообщения: 544
Зарегистрирован: 01 июл 2016, 22:50
Откуда: Пензенская обл., г. Никольск
Репутация: 153
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение MX_Master » 11 дек 2016, 18:08

Я думаю, что перед тем как начинать кодить, надо глубоко задуматься на тему - буду ли я (или еще кто-то) портировать мой проект под другие STM МК? Если все мысли сходятся к ответу - ДА, то мой выбор это HAL. С другой стороны, если проект крошечный в плане кода или по максимуму выжирает ресурсы МК, то мой выбор это SPL и ниже.

Тут уместно сравнение. STM32 HAL это как те же pinMode(), digitalWrite(), analogWrite() и т.д. - в ардуинке. Если б этой абстракции не было, ардуинка никогда б не получила столько юзеров. Таким же путём шагает STM32 HAL. Для начинающего изобретателя герлянды из светодиодов куда приятнее выглядит

Код: Выделить всёРазвернуть
НAL_GPIO_WritePin( GPIOA, GPIO_PIN_2, GPIO_PIN_RESET );

чем

Код: Выделить всёРазвернуть
GPIOA->ODR &= ~(1UL << 2);
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение michael-yurov » 11 дек 2016, 18:19

А если без HAL:
Код: Выделить всёРазвернуть
GPIO_WriteBit ( GPIOA, GPIO_Pin_2, Bit_SET );


или
Код: Выделить всёРазвернуть
GPIO_SetBits ( GPIOA, GPIO_Pin_2 );
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
 
Сообщения: 10536
Зарегистрирован: 26 июл 2012, 00:10
Откуда: Новоуральск, Свердловская область.
Репутация: 4082
Медальки:
Настоящее имя: Михаил Львович

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение UAVpilot » 11 дек 2016, 18:25

staltech писал(а):Это та платка что недавно на фотке мелькала?

Да.

MX_Master писал(а):Таким же путём шагает STM32 HAL.

Это не основная цель, а бонус. Основная цель поддержать аппаратную стратегию stm32 - если перестало хватать аппаратных ресурсов, то на место прежнего МК можно тупо запаять более мощный и прога, использующая HAL пойдёт на нём без переделок.

С пинами пример неудачный - не показывает разницу. Хорошим примером была бы например инициализация периферии для работ с ADC через DMA на разных МК, например на stm32f1 и stm32f4.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение AndyBig » 11 дек 2016, 18:55

UAVpilot писал(а):Хорошим примером была бы например инициализация периферии для работ с ADC через DMA

Вот инициализация нескольких каналов ADC через DMA:
Код: Выделить всёРазвернуть
void ADC_Config()
{

   GPIO_InitTypeDef GPIO_InitStructure;
   ADC_InitTypeDef ADC_InitStructure;
   DMA_InitTypeDef DMA_InitStructure;
   
   RCC_ADCCLKConfig(RCC_PCLK2_Div6);
   // Enable ADC1, DMA, GPIOA and GPIOB clock
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA, ENABLE);
   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

   // Configure PB1 (ADC Channel9) as analog input -------------------------
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
   // Configure PA4 (ADC Channel4) as analog input -------------------------
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
#ifdef _RESKEY_
   // Configure PA3 (ADC Channel3) as analog input -------------------------
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
#endif

   // DMA1 channel1 configuration ----------------------------------------------
   DMA_DeInit(DMA1_Channel1);
   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;
   DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADCResults;
   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
#ifdef _RESKEY_
   DMA_InitStructure.DMA_BufferSize = 3;
#else
   DMA_InitStructure.DMA_BufferSize = 2;
#endif
   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
   DMA_Init(DMA1_Channel1, &DMA_InitStructure);
   // Enable DMA1 Channel1
   DMA_Cmd(DMA1_Channel1, ENABLE);

   // ADC1 configuration -----------------------------------------------------
   ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;
   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
#ifdef _RESKEY_
   ADC_InitStructure.ADC_NbrOfChannel = 3;
#else
   ADC_InitStructure.ADC_NbrOfChannel = 2;
#endif
   ADC_Init(ADC1, &ADC_InitStructure);
   // ADC1 regular channels configuration
   ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5);   
   ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 2, ADC_SampleTime_55Cycles5);
#ifdef _RESKEY_
   ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_55Cycles5);
#endif
   // Enable ADC1 DMA
   ADC_DMACmd(ADC1, ENABLE);
      
   // Enable ADC1
   ADC_Cmd(ADC1, ENABLE);
   // Enable Vrefint channel17
   ADC_TempSensorVrefintCmd(ENABLE);
   
   // Enable ADC1 reset calibration register
   ADC_ResetCalibration(ADC1);
   // Check the end of ADC1 reset calibration register
   while(ADC_GetResetCalibrationStatus(ADC1));
   
   // Start ADC1 calibration
   ADC_StartCalibration(ADC1);
   // Check the end of ADC1 calibration
   while(ADC_GetCalibrationStatus(ADC1));
   
   // Start ADC1 Software Conversion
   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
   
   // Test on DMA1 channel1 transfer complete flag
   while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));
   // Clear DMA1 channel1 transfer complete flag
   DMA_ClearFlag(DMA1_FLAG_TC1);

}
//==============================================================================   

Правда, я использую древние библиотеки от ST - Standart Periferal Library :)
Аватара пользователя
AndyBig
Мастер
 
Сообщения: 3874
Зарегистрирован: 07 мар 2014, 04:01
Откуда: юг России
Репутация: 1056
Медальки:

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение MX_Master » 11 дек 2016, 20:01

UAVpilot писал(а):С пинами пример неудачный - не показывает разницу.

Этот пример был применительно к моей задаче. Дергать биты портов и читать порты целиком надо очень часто. Если есть возможность, то лучше атомарно. А светодиодную змейку с HAL'ом быстрей написать. Ушёл читать Description of STM32F4xx HAL drivers ..

И еще один вопрос на десерт. Работу ардуинки можно было визуально симулировать в протеусе, где даже осциллограф был. А где ж визуально просимулировать работу Кортекса М4 ?
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение UAVpilot » 11 дек 2016, 21:03

AndyBig писал(а):Вот инициализация нескольких каналов ADC через DMA:

Отквотил только удобную часть? :) А ты попробуй написать такое-же и для М4 и сравни... :)

MX_Master писал(а):Дергать биты портов и читать порты целиком надо очень часто.

Это как раз в обоих библиотеках практически одинаково, даже внутренняя реализация, разница в основном в инициализации периферии, в HAL она максимально платформонезависима.

MX_Master писал(а):А где ж визуально просимулировать работу Кортекса М4 ?

На демоплатах. :) Лабцентр уже заявил, что такой симулятор они дерать не планируют, т.к. нет должного спроса, но если кто-то профинансирует такую работу, то они конечно-же сделают. Тут нет желающих? :)
Но демоплаты несколько дешевле обходятся...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16858
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4149
Медальки:
Настоящее имя: Сергей

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение u37 » 11 дек 2016, 21:37

Ой, не понимаю я вас. От ардуинки на F4? А почему же не F7??
Для subj вполне хватает F030.
Теперь по сути. ТС задался вопросом быстрых тиков для мягкости вращения двигателей, но забыл, что программа выдает тики явно не аппаратно.
Что Win, что Linux - это не реалтайм системы, они не способны адекватно выдерживать времена и, что особо противно, способны отнимать время в самый неподходящий момент. Драйвер под Win, у него тоже есть весьма опосредованная точность как вызова, так и времени исполнения. Если запись в порт (LPT) занимает 1 uS, то та-же запись через драйвер Win занимает уже 10 uS, и это на современном компьютере. Причина - большие накладные расходы на вход/выход драйвера.
Короче, тики хоть и сыпятся с частотой 30 кГц, но это только в_среднем. А в действительности, интервал междй соседними может быть гораздо меньше 30 uS. Как следствие - пропуск тика на моторе.
Т.е. программа должна не "ускорять", а "буферизировать" поток. Тогда отпадают много вопросы из темы и добавляются новые фичи. Например, ограничение скорости разгона/торможения. Возможно, автореверс.
u37
Новичок
 
Сообщения: 15
Зарегистрирован: 11 дек 2016, 15:03
Репутация: 1
Настоящее имя: serj

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение AndyBig » 11 дек 2016, 22:20

UAVpilot писал(а):Отквотил только удобную часть? А ты попробуй написать такое-же и для М4 и сравни...

Отквотил целиком всю функцию настройки АЦП с DMA :) С M4 не работаю :)
Аватара пользователя
AndyBig
Мастер
 
Сообщения: 3874
Зарегистрирован: 07 мар 2014, 04:01
Откуда: юг России
Репутация: 1056
Медальки:

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение MX_Master » 11 дек 2016, 23:00

u37 писал(а):Ой, не понимаю я вас. От ардуинки на F4? А почему же не F7??
Для subj вполне хватает F030

Мегу2560 взял за 7$, макетку с F4 возьму за 8$, почём нынче макеточка с F7? С ардуинкой я уже разобрался в своей задаче, ресурсов едва хватает. почему бы не попробовать в рамках 10$ что-то получше? Особенно, если могут добавится новые полезные функции
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 3305
Зарегистрирован: 27 июн 2015, 19:45
Откуда: KZ
Репутация: 1725
Медальки:
Настоящее имя: Михаил

Re: Умножитель STEP/DIR на Arduino или STM32 Cortex M4

Сообщение AndyBig » 11 дек 2016, 23:19

Бери плату с Altera EP4CE10 - аппаратные генераторы STEP/DIR до десятков МГц с любым умножением-делением шагов, аппаратные обработчики энкодеров, аппаратная реакция на все прерывания 1 такт... Да и вообще все там - аппаратное, причем есть (будет) все что нужно и при этом ничего лишнего :-D
Цена - всего двадцатка баксов :)
Аватара пользователя
AndyBig
Мастер
 
Сообщения: 3874
Зарегистрирован: 07 мар 2014, 04:01
Откуда: юг России
Репутация: 1056
Медальки:

Пред.След.

Вернуться в Электроника

Кто сейчас на конференции

Зарегистрированные пользователи: aldemm, alexxx666, Bender, Bing [Bot], FL@gMan, Google [Bot], kupidon1979, Majestic-12 [Bot], Yandex [bot], ДмитрийП

Поделиться

Reputation System ©'