STM32F4 Начнем программировать CubeMX!

Print Friendly, PDF & Email

STM32F4 Начнем программировать!

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

Наш Опыт программирования различных процессоров начиная с архитектуры х86, С51, AVR, Nios II, TigerShark, ну и конечно STM32, точно нам говорит, что на сегодня почти всё сравнялось, и у всех производителей почти один и тот же подход. Конкретно о подходах и программировании того или иного кристалла и его особенностей мы поговорим дальше, а сейчас просто рассмотрим этапы проектирования и реализации прошивок для микроконтроллеров, который почти одинаков, во многих видах микроконтроллерах с какими то малыми изменениями. Рассмотрим их

Оглавление

1. Этапы проектирование ПО для микроконтроллеров STM32. 2

2. Установка компилятора. 2

3. STM32CubeMX.. 3

3.1. Начинаем работать с STM32CubeMX.. 7

3.1.1. Структура STM32CubeF4_FirmWare. 8

3.1.2. Настройка системы в CubeMX.. 15

3.1.2.1. Окно Настройки кристалла. 17

3.1.2.2. Окно Схема тактирования МК.. 19

3.1.2.3. Окно Конфигурация Элементов МК.. 23

3.2. Программируем в Keil 24

3.2.1. Генерируем инициализационный код, наконец-то. 24

3.2.2. Начинаем программировать. 25

4. Ура мы запустили Keil HAL LED.. 27

5. Заключение. 29

6. Используемые материалы.. 29

1. Этапы проектирование ПО для микроконтроллеров STM32

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

Наш Опыт программирования различных процессоров начиная с архитектуры х86, С51, AVR, Nios II, TigerShark, ну и конечно STM32, точно нам говорит, что на сегодня почти всё сравнялось, и у всех производителей почти один и тот же подход. Конкретно о подходах и программировании того или иного кристалла и его особенностей мы поговорим дальше, а сейчас просто рассмотрим этапы проектирования и реализации прошивок для микроконтроллеров, который почти одинаков, во многих видах микроконтроллерах с какими то малыми изменениями. Рассмотрим их:

· Установка компилятора;

· Установка библиотек;

· Выбор языка разработки (ASM, C, C++);

· Выбор среды программы: либо это библиотеки, либо ОС.

o Библиотеки:

§ CMSIS, SPL, HAL;

o ОС :

§ CMSIS RTOS, μC/OS-II , FreeRTOS, Linux, Android и другие;

Теперь перейдем к компиляторам!

2. Установка компилятора

Самих компиляторов очень много под архитектуру ARM, вот основные и наиболее популярные :

· RealView Development Suite (ARM C/C++ Compiler)

· Keil MDK-ARM (ARM C/C++ Compiler)

· IAR Embedded Workbench for ARM (IAR C/C++ Compiler)

· MULTI IDE for ARM (Green Hills C/C++ Compiler)

· CooCox CoIDE (GCC Compiler)

Мы будем использовать Keil, потому что еще давно к нему привыкли J.

Наш проект мы будем компилировать, и запускать в версии Keil 5.17. Качаем его !

Ссылка — https://www.keil.com/download/product/.

Или какой нить не ниже 5.Х.

Установив переходим к установке системной вещи под названием CubeMX.

3. STM32CubeMX

Рис. 3.1 Обзор прицепов работы с CubeMX

STM32CubeMX – это генератор инициализационного кода для семейства STM32, позволяющий автоматически настроить всю периферию, для данного кристалла или сгенерировать инициализационный код для какого-нибудь отладочного набора.

STM32Cube является комплексным программным решением, комбинируя встроенное программное обеспечение элементов MCU на базе программного обеспечения STM32CubeMX. Встроенное программное обеспечение не только охватывает все микроконтроллеры STM32 с высокой переносимостью, драйверов низкого уровня, но поставляется с набором компоненты middleware уровня, такие как RTOS, USB, TCP / IP, файловая система или графика. STM32CubeMX помогает пользователю настроить STM32 MCU (распиновку, цепи тактирования и периферию) и программное обеспечение стеки. Она также может помочь оценить энергопотребление благодаря калькулятору расчета потребляемой мощности. В STM32Cube встроены библиотеки программного обеспечения и STM32CubeMX генератор кода / конфигуратор может быть использован независимо друг от друга, но их полный потенциал достигается когда они используются вместе; как только MCU настроен, Пользователь может генерировать инициализационный C код, основанный на произведённых настройках в STM32CubeMX.

Свои примеры мы будем показать на отладочной плате STM32F429I-DISCO.

Рис. 3.2. Вид отладочной платы STM32F429I-DISCO

Ссылка на страницу STM32CubeMX для всех семейств:

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242 **

Ссылка на страницу STM32CubeMX для семейства STM32F4 набор библиотек :

· http://www.st.com/web/en/catalog/tools/PF259243

Устанавливаем его и переходим к процессу создания и настройки проекта для STM32.

** — внизу ссылка на саму программу, а для установки соответствующих библиотек , надо выбрать, соответствующий набор, подходящей для выбранного семейства, мы будем вести изложение на примере семейства STM32F4.

3.1. Начинаем работать с STM32CubeMX

Общие принципы работы в STM32CubeMX — создаем проект, выбираем микроконтроллер и нам сразу же предлагается большая схема со всеми выводами выбранного нами контроллера. Нажимая на выводы и заходя в разнообразные меню, мы легко настраиваем как периферию, так и режимы работы каждого конкретного вывода. Сразу же очевидные плюсы — можно наглядно увидеть, какие выводы уже заняты, а какие еще свободны (в крупных проектах — более чем полезная фишка). Как все это работает мы еще увидим на примере, а пока обсудим в общих чертах )

Итак, мы выбрали все нужные нам выводы, ввели все настройки периферии (например, частоты тактирования, режимы работы таймеров….), и STM32CubeMx дает нам возможность сгенерировать соответствующий код. То есть в итоге мы получаем готовый проект, с уже прописанными настройками, с подключенными библиотеками и с готовой инициализацией всей выбранной периферии. Базой для всего этого являются библиотеки CMSIS и HAL. CMSIS мы уже давно знакомы, а вот вторая библиотека — это что-то новое. – Здесб надо дать ссылку на статью, где описывается CMSIS SPL HAL)

Библиотека STM32 HAL Driver пришла (пока еще не окончательно) на смену всем хорошо известной библиотеке Standard Peripheral Library (SPL). В принципе, и структура и функции этих библиотек очень схожи, но HAL более заточена под принцип «вызвал функцию и сразу заработало». Для тех, кому не особо хочется возиться с какими-то низкоуровневыми настройками периферии — то что надо 😉Естественно, на данный момент библиотека еще «сыровата», есть некоторые недоработки, но с каждым новым релизом ситуация все лучше и лучше.

Перейдем к практике. И тут я решил остановить свой выбор на семействе STM32F4, хотя это не имеет особого значения, поскольку мы всего лишь хотим ознакомиться с функционалом и принципом работы STM32CubeMx. Итак ST предлагают нам во-первых, собственно, сам STM32CubeMx (в скачанном архиве будет .exe файл для установки программы), а также набор библиотек STM32Cube FirmWare F4. Несмотря на почти одинаковые названия архивов на сайте ST — это абсолютно разные вещи. CubeMx — готовый софт для конфигурирования периферии, Cube FW — набор множества библиотек.

3.1.1. Структура STM32CubeF4_FirmWare

И для начала рассмотрим, что же за библиотеки нам предлагаются. Распаковываем архив и начинаем ковырять:

Рис. 3.1.1.1. Структура папок STM32CubeF4_FirmWare

Рис. 3.1.1.2. Количество примеров для определённых отладочных плат

Рис. 3.1.1.3. Программные компоненты, реализованные в STM32CubeF4_FirmWare

Рис. 3.1.1.4. Программная архитектура STM32CubeF4_FirmWare

Архитектура имеет три уровня реализации, которые оисывают свой уровень обстракции:

· Level 0: Этот уровень делится на три подуровня:
• Пакет Поддержки Платформы (BSP): этот слой предлагает набор программных интерфейсов, связанных с аппаратными Компонентами на аппаратных платах (Аудиокодек, I / O расширитель, Сенсорный экран, SRAM драйвер, ЖК драйверы. и т.д …) и состоит из двух частей:

o Компонент: это драйвер, связанные с внешним устройством на плате, и не связан с STM32, драйвер компонент обеспечивает определенные интерфейсы к BSP внешнего компонента драйвера и могут быть перенесены на любую плату.

o BSP драйвер: он позволяет драйверу компонента должны быть связаны с конкретной плате и предоставляет набор удобных интерфейсов. Правило API именования BSP_FUNCT_Action (): напр. BSP LED_Init (), BSP LED_On ()

Он основан на модульной архитектуре, что позволяет ему быть легко перенесен на любом оборудовании, просто реализации подпрограммы низкого уровня.

• Уровень Аппаратных Абстракций (HAL): этот слой предоставляет драйвер низкого уровня, и методы аппаратных интерфейсов, чтобы взаимодействовать с верхними слоями (приложения, библиотеки и стеки). Он обеспечивает общий, мульти экземпляр и функционально ориентированные интерфейсы, которые позволяют чтобы разгрузить реализацию пользовательского приложения, предоставляя готовые к использованию процессов. Для примера: для периферийных устройств связи (I2S, UART ) он обеспечивает интерфейсы позволяющие инициализации и настройки периферийного уровня, управлять передачей данных на основе опроса, прерываниями или DMA процессом и управлять ошибками связи с которые могут возникать во время коммуникация. HAL Драйверы API делятся на две категории :

o общие интерфейсы API, которые обеспечивают общие и определенные функции на всех сериях расширения API,

o STM32 который предусматривает конкретные и индивидуальные функции для конкретного семейства или определенной части семейства.

Основные примеры периферийного использования: этот слой содержит примеры основных операций в STM32F4 периферии используя только ресурсы HAL и BSP.

· Level 1: Этот уровень разделен на два подуровня:

• Компоненты промежуточного уровня(Middleware components:): набор библиотек, охватывающих USB Host и библиотеки устройств, STemWin, LibJPEG, FreeRTOS, FatFs, LwIP и PolarSSL. горизонтальное взаимодействие между компонентами этого слоя осуществляются непосредственно путем вызова API, функцию во время работы вертикальная взаимодействие с драйверами низкого уровня осуществляется с помощью специфических обратных вызовов и статические макросы реализованные в интерфейсе библиотеки системных вызовов. Например, FatFs Реализует дисковый ввод / вывод драйвер для доступа к диск MicroSD или USB Mass Storage Класс. Основные особенности каждого компонента промежуточного программного таковы:

o USB Host и Device Библиотеки :

— классы Несколько USB поддерживаются (запоминающих, HID, CDC, DFU, аудио-, MTP) — Поддержка мульти функции пакетной передачи: позволяет отправлять большие объемы данных
без разделения их на макс трансфертов размер пакета.

— Использует файлы конфигурации, чтобы изменить ядро и конфигурацию библиотеки без изменения кода библиотеки (только чтение).

— Включает в себя 32-разрядных выровненные структуры данных для обработки передачи DMA основе в Highspeed Режимы.

— Поддержка мульти USB OTG основные экземпляры из пользовательского уровня через конфигурационный файл (Позволяет работать с более чем одним USB хост / устройство периферии).

— RTOS и Автономная работа

— Связь с низкоуровневым драйвером осуществляется через уровень абстракции, используя

Файл конфигурации, чтобы избежать каких-либо зависимости между Библиотекой и низкого уровня драйвера.

o Стек STemWin Графический

— Профессиональные решения для развития GUI на основе EMWIN Segger в решение

— Оптимизированные драйверы дисплея
— Программы для генерации кода и редактирования растрового (STemWin Builder …)

o LibJPEG

— Стандарт с открытым исходным кодом

— Реализация C для кодирования изображения JPEG и декодирования.

o FreeRTOS

— Стандарт с открытым исходным кодом

— Уровень совместимости CMSIS
— Операция Tickless в режиме пониженного энергопотребления

— Интеграция со всеми модулями STM32Cube Middleware

o FAT файловой системы

— FatFs FAT библиотека с открытым исходным кодом

— Поддержки длинных имен

— Поддержка динамических несколькими накопителями

— RTOS и режимом автономной работы

— Примеры с MicroSD и USB хост-класса запоминающих

o LwIP TCP / IP стек

— Стандарт с открытым исходным

— RTOS и режимом автономной работы

• Примеры, основанные на компонентах Middleware: каждый Middleware компонент поставляется с одним или несколькими примерами (называемых также приложений), показывающие, как использовать его примеры интеграции, которые используют несколько компонентов промежуточного также предоставляются.

· Level 2: Этот уровень состоит из одного слоя, который является глобальным реальным-временем и графическое демонстрации на основе слоя Middleware программного обеспечения, слоя низкого уровне абстракции и приложений, которые используют периферийные устройств для функции поддерживаемых отладочным набором.

3.1.2. Настройка системы в CubeMX

Попробуем создать проект для нашей отладочной платы STM32F429I-DISCO!

Рис. 3.1.2.1. Стартовое окно

Выбираем новый проект – «New Project«. Сразу же открывается окно с огромным количеством настроек, в котором нам необходимо выбрать микроконтроллер, который мы собираемся использовать в нашем проекте. Я выбрал STM32F429I‑DISCO0. Появляется новое окно:

Рис. 3.1.2.2. Окно выбора либо кристалла, либо отладочной платы

Выбираем закладку Board Selector и видим следующее окно


Рис. 3.1.2.3. Окно выбора либо кристалла, либо отладочной платы с общим описанием платы

Далее двойным щелчком выбираем плату и видим опять новое окно J))).

3.1.2.1. Окно Настройки кристалла

Рис. 3.1.2.4. Окно Настройки кристалла

В окне на рис. 3.1.2.3. Показаны два поля : 1 – ое , позволяет настроить те или иные регистры в заданные состояния, а справа, во втором окне , задана цоколевка кристалла. Если заметить, то на многих пинах уже заданы определенные настойки. Допустим на пинах PC14, PC15 – эти пины определены, как вход и выход для кварцевого резонатора. А ножка PC1 – определена как SPI и подходит к MEMS датчику. Вот в принципе общие возможности. Так же по нажатию мышки на пин, можно выбрать его настройки, если вы хотите его переопределить! ТО есть всё очень удобно и наглядно, что очень важно, чтоб не сидеть и не писать что где и как ! Очень системный подход!

Рис. 3.1.2.5. Представлены возможные иконки состояния тех или иных регистров

3.1.2.2. Окно Схема тактирования МК

Далее идет закладка «Clock Configuration«, посмотрим что там! Ну и что Вы видите ?! Красота !

Рис. 3.1.2.5. Схема тактирования МК

Опять же всё очень наглядно и можно менять многие параметры и при этом учитываться допустимые соотношения делителя и умножителя PLL и если вы зададите недопустимые данные то, вам высветиться ошибка!

Переходим к следующей закладке «Configaration«. В ней мы можем настроить MiddleWare уровень, добавить MiddleWare компоненты а также настроить периферию. Ну я для примера добавил FASTFS , FreeRTOS , и эти элементы добавляться в систему и можно произвести их настройку. В тестовом примере мы пока их не будем использовать. Так же видно что у нас нет никакой аналоговой части. Это связано с етм что в первом окне мы не выбрали ни одного АЦП. Это можно легко сделать перейти на первую вкладку и выбрав какой нить АЦП .

Рис. 3.1.2.6. Настройка конфигурации периферии и MiddleWare компонентов


Рис. 3.1.2.6. Пример выбора АЦП

Для примеры мы просто создадим настройки по умолчания, где нет АЦП и дополнительных компонентов.

Рис. 3.1.2.7. Пример нашего тестового проекта

3.1.2.3. Окно Конфигурация Элементов МК

Следующая закладка, отвечает за расчет мощности рассеивания. Но её мы рассматривать не будет. Посмотрите её сами. А теперь перейдём к самому ответственному это написания кода, включение и управление нашим китом!

3.2. Программируем в Keil

3.2.1. Генерируем инициализационный код, наконец-то

От создания кода нас отделяет, какая то малость.

Рис. 3.2.1.1. Вызываем меню создания инициализационного кода

Откроется окошко, в котором можно выбрать имя и папку вашего проекта. Выбрать компилятор, в данном случае выбираем «MDKARM V 5″ (Keil v5.x). А во второй закладке можно выбрать опции создания вашего кода. Всё, осталось запустить генерацию!

Рис. 3.2.1.2. Опции генерации проекта

Последний штрих это то, что программа позволяет создать отчет о вашем проекте , это делается в том же меню где выбирали генерацию кода, как показано на рис. 3.2.1.1. Сделайте его самостоятельно! Ну а теперь. Будет очень трудно. Так что идите перекусите, подкрепитесь или просто походите вокруг стула, для отвлечения. И снова возвращайтесь к нам. Дальше интереснее!!!

3.2.2. Начинаем программировать

Заходим в папку с проектом у меня он выглядит так.

Рис. 3.2.2.1. Структура фалов проекта

CubeMX нам создал папку проекта, где уже есть все необходимые файлы для компиляции. Раньше же это надо было делать руками и из общего набора заголовочных фалов и исходников кода, создавать свои сборки. Теперь этого не надо, всё уже в одной папки и рядом! При этом вы можете использовать просто голый CMSIS либо HAL ( дать ссылку на статью, где даеться пояснение на эту тему).

Ну чтож по приветствуем мир J))). С учетом того, что в пункте 2, мы произвели установку Keil, заходим в папку MDKARM и находим там Проектный файл для Keil, с расширением *.uvprojx запускаем его. У меня он будет называться «Second.uvprojx» (потому что первый у меня не получился ^) .

Рис. 3.2.2.2. Структура проекта

Мне кажется очень неплохая структура, проекта которая разбита на следующие папки и уровни:

· HAL API – функции HAL уровня;

· CMSIS – драйверы низкого уровня;

· Application/USER – прикладные функции (main.с, _it.c – описание обработчиков прерывания и др.) ;

· Application/MDKARM — здесь стартап ассемблерный код (файл startup_stm32f429xx.s ), в котором указана описание функций обработчиков прерывания и указание на main entry point ( на начальную входную функцию , т.е. функцию main), функцию, с которой будет грузиться проект.

Мы в последующих статьях рассмотрим больше подробностей , а сейчас просто попробуем написать пару строк для мигания светодиодом, посредством HAL и поймем заключительные моменты для запуска полноценного приложения!

4. Ура мы запустили Keil HAL LED

А сейчас допишем такие строки в код фала main.c

1. int main(void)

2. {

3.

4. /* USER CODE BEGIN 1 */

5.

6. /* USER CODE END 1 */

7.

8. /* MCU Configuration———————————————————-*/

9.

10. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

11. HAL_Init();

12.

13. /* Configure the system clock */

14. SystemClock_Config();

15.

16. /* Initialize all configured peripherals */

17. MX_GPIO_Init();

18.

19. /* USER CODE BEGIN 2 */

20.

21. /* USER CODE END 2 */

22.

23. /* Infinite loop */

24. /* USER CODE BEGIN WHILE */

25. while (1)

26. {

27. /* USER CODE END WHILE */

28.

29. /* USER CODE BEGIN 3 */

30.

31.

32. HAL_GPIO_WritePin(GPIOG,GPIO_PIN_13,GPIO_PIN_RESET);

33. HAL_Delay(500);

34. HAL_GPIO_WritePin(GPIOG,GPIO_PIN_13,GPIO_PIN_SET);

35. HAL_Delay(500);

36.

37. // GPIO_Pin_13

38.

39.

40.

41. }

42. /* USER CODE END 3 */

43.

44. }

Строки с 32 – 35 вставляем в файл main.c .А теперь самый ответственный момент зашьем проект.

5. Заключение

Мы познакомились с необходимым набором элементов для программирования и разработки проектов под МК STM32 на базе процессоров CortexM4. Познакомились с архитектурой и структурой проекта построенного с использованием CubeMX, с настройками приложения CubeMX. Так же научились и разобрались со структурой проекта в Keil. Ну и конечно создали программу мигания светодиодом, расположенным не плате с использованием функцция HAL. В следующих статьях мы более углублённо и детально разберем создания новых проектов и работы с переферией платы по средством Keil! Спасибо за внимание !

6. Используемые материалы

ARM® Cortex®-M:

· Cortex-M Series from ARM.com ;

· Wikipedia ARM_Cortex-M

· Cortex-M4 Technical Reference Manual

STM32 STMicroelectronics:

· ST.com

· STM32 Cortex-M

Статьи :

· Cortex-M4 STM32



Next Запись

Реализация беспроводного канала управления при помощи встраиваемых радиомодулей 433МГц STM32F4

 Реализация беспроводного канала управления при помощи встраиваемых радиомодулей 433МГц ... Read more




Previous Запись

ARM Cortex - M4 вычислительные возможности ( DSP, MAC , FPU , SIMD )

 ARM Cortex - M4 вычислительные вохможности ( DSP, MAC ... Read more

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 оценок, в среднем: 5,00 из 5)
Загрузка...

12 thoughts on “STM32F4 Начнем программировать CubeMX!”

  1. Друг says:

    Нормально! Доходчиво! Ждем продолжение!

  2. My says:

    А всё же поподробнее можно раскрыть закладку Configuration???

  3. виталий says:

    пытаюсь через cube подключить sd-карту к stm32f429i через sdio в однобитном режиме с fatfs- ничего не получается(((

    1. Admin
      Admin says:

      Посмотрите вот этот ресурс http://stm32f4-discovery.net/2015/09/hal-library-27-identification-for-stm32fxxx/ , здесь в библиотеке вроде есть драйверы к fastfs , а в нем есть управление SD.

  4. oksiSmook says:

    fdfd

  5. Mpa3b says:

    В следующих статьях мы более углублённо и детально разберем создания новых проектов и работы с переферией платы по средством Keil
    ——

    было ли продолжение?

  6. PhillipBlelt says:

    Hello. And Bye.

  7. alekseydv says:

    Услуги частного детектива и пробив информации по всей РФ.
    Что мы делаем:
    1. пробив абсолютно любой информации по физическим и юридическим лицам
    2. пробив любой информации по линии гибдд
    3. пробив любой информации по линии мобильных операторов
    4. пробив абсолютно любой информации по всем структурам РФ, РБ и Украины

    Розыск должников и безвести пропавших людей
    Розыск родственников с которыми утеряна связь
    Выявление супружеской неверности
    Выявления аморального поведения детей и родственников (наркотики, алкоголь и прочее)
    +7918 0412948 Алексей (viber, whatsapp, телефон)

  8. Charlesangelkassy says:

    best ico to invest in 2018
    Silk Road was closed and the FBI has arrested the man who runs and created one of the most sophisticated online drug bazaar to date. Ross William Ulbricht was arrested on Tuesday afternoon charging him with drug trafficking, money laundering and computer hacking, according to CNN Money on Oct. 2.

    It can be a way to store your bitcoin s. Specifically, is certainly software which been made to store bitcoin. It can be run into your desktop computer, laptop, mobile phone (except, as yet, Apple) and additionally be assisted to store bitcoin on things like thumb drives. If you are occupied with being hacked, then escalating a choice. Even the Winklevoss* twins, possess millions committed to bitcoin, placed their investment on hard drives which they then put into a safety deposit box.

    12/15: Hey, I was Expecting One other Guy, Not You. Circumstance Of Not Disrespect Another Player. Rebuys = Loose Play — Is That Bad Or Profitable? Are Deepstacked Tournaments Weeding Out the Recreational Players? Hey, It’s Omaha, Get To Play 2 Cards In Your Hand, Preserve in mind? Gambling song promoted immediately is The Gambler by Kenny Rogers. [Visit Website] [Download MP3].

    Although these few tips may assist you decide on an exchanger built not certified and inside your are really undecided where one to get then start by sending just one small amount for you to become exchanged and then as you build trust in the exchanger you have picked discover start sending larger comes down to them.

    Always someone to try to know the relation of economics and politics, I asked our Argentine contact what life was like for your average Argentinian in Buenos Aires. She related how expensive it had been for the average person to purchase imported property. This resulted their own most recent economic crisis of 2001-2002. When I discussed traveling overseas, she viewed as me cross-eyed. There was no way he did this possible to be with her without saving for quite some time.

    12/12: BIG Dave and Joe consult poker pro Allen «Chainsaw» Kessler about his impressions of various tournament structures and to be able to improve the for serious players. Kessler also talks about his participation in social media marketing and the way affects sport. [Visit Website] [Download MP3].

    That confidence has and it will continue to erode. The most important reflection of a erosion is in long-term interest numbers. Despite all the efforts, along with they also are massive, to hold interest rates down, might on the increase. This is often a recognition with the market not wearing running shoes is uncomfortable with present-day debt condition of the U.S. That discomfort increase. Even if rates simply return any long-term average, the collision of politics and economics will relax in full display in Washington and state capitals during the country. That time is NOT different.

  9. JuliusSlify says:

    post

  10. RoberttBeelp says:

    variant1

  11. ThomasInfob says:

    Hello. And Bye.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

© 2014-2017 ElectroProg Все права защищены!

↓
↓