пʼятниця, 15 березня 2019 р.

Mbed: Знайомство з Mbed Studio та створення тестової програми blinky

Передмова

Нещодавно вийшла "Mbed Studio IDE" для розробки додатків і бібліотек "Mbed OS 5", яка вміщає в собі всі необхідні залежності та інструменти в одному пакеті, що дозволяє створювати, компілювати та налагоджувати програми Mbed на вашому комп'ютері. Це і програмування в стилі Arduino IDE, що допоможе легко стартувати людям, які звикли до Arduino, та хочуть перейти на мікроконтролери STM32. Це і програмування за допомоги HAL бібліотек, для тих, хто вже знайомий з сімейством STM32, та віддає перевагу цим бібліотекам. В цій статті розглянемо встановлення "Mbed Studio IDE", та створення не простого мікроконтролерного "Hello, world!", яким не тільки поблимаємо вбудованим світлодіодом. А щоб переконатись в легкості і доступності розробки на всі смаки, зробімо так - ініціалізуємо і поблимаємо вбудованим світлодіодом на PA_5 за допомоги mbedOS, ініціалізуємо і поблимаємо зовнішнім світлодіодом на PA_9 (який треба приєднати до плати самотужки) за допомоги HAL драйверів. Та не просто поблимаємо ними по черзі з "delay" в основному циклі, а за допомоги переривань з різною частотою. Плюс в основному циклі будемо передавати по UART2 (цей UART2 також надсилає данні і на USB_COM_PORT) лічильник секунд. Піддослідною платою буде STM32F103 Nucleo.

Встановлення Mbed Studio IDE

Завантажте та запустіть інсталяційний файл з "Mbed Studio IDE". Встановлення стандартне без якихось особливостей. Слідуйте вказівкам інсталяційної програми. Після встановлення запустіть Mbed Studio IDE. Та підключіть свою плату Nucleo до USB роз'єму.

Створення демонстраційного проекту

  1. File -> New Program -> Select Example Code "empty Mbed OS program" -> Program name "my_test_blinky" 
    Створення проекту
  2. Відкрийте файл main.cpp, клацнувши по назві файлу в дереві проекту. Зітріть весь текст в полі для коду і вставте цей демонстраційний код (код добре прокоментований додаткових пояснень не потребує):
    #include "mbed.h"
    
    RawSerial pc(USBTX, USBRX);     // tx, rx ініціалізація UART2 для передачі/прийому даних по USB COM PORT
    
    DigitalOut  ledGreen(LED2);     // ініціалізація вбудованого на платі Nucleo світлодіода як цифровий віхід
    
    Ticker flipper1;                // створення ticker з назвою flipper1
    Ticker flipper2;                // створення ticker з назвою flipper2
    
    //--Оголошення прототипів функцій----
    static void flip1(void);        // функція перекидання стану світлодіода PA_5 за допомоги MbedOS
    static void flip2(void);        // функція перекидання стану світлодіода PA_9 за допомоги HAL
    static void ledWhiteInit(void); // функція ініціалізації ніжки PA_9 за допомоги HAL драйверу
    //-----------------------------------
    
    // main() runs in its own thread in the OS
    int main()
    {   
        ledWhiteInit();                // викликаємо функцію ініциалізації ніжки PA_9 за допомоги HAL драйверу
        int counter = 0;               // ініціалізуємо змінну для лічильника секунд
        flipper1.attach(&flip1, 0.5);  // закріплюємо за flipper1 виклик функції flip1 з частотою два рази на секунду
        flipper2.attach(&flip2, 1.5);  // закріплюємо за flipper2 виклик функції flip2 з частотою раз на півтори секунди
        pc.baud(115200);               // встановлюємо швидкість обміну даними по UART2 як 115200
        pc.printf("Hello UART!\n\r");  // надсилаємо привітання в usb_com_port
    
        while (true)
        {
            pc.printf("counter sec = %d\n\r", counter++);   // надсилаємо в usb_com_port значення лічильника
            wait(1.0);                                      // чекаємо 1 секунду
        }
    }
    
    //--функція ініціалізації ніжки PA_9 за допомоги HAL драйверу--
    static void ledWhiteInit(void)
    {
        __HAL_RCC_GPIOA_CLK_ENABLE();                           // викликаємо тактування порту А
        
        GPIO_InitTypeDef GPIO_InitStruct;                       // створюємо структуру для налаштування
    
        GPIO_InitStruct.Pin = GPIO_PIN_9;                       // ніжка 9
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;             // режим вихід
        GPIO_InitStruct.Pull = GPIO_NOPULL;                     
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;           
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);                 // ініціалізуємо
    
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);   // встановлюємо початковий стан "вимкнено"
    }
    //-------------------------------------------------------------
    
    //--функція зміни стану світлодіода на PA_5--------------------
    static void flip1(void)
    {    
        ledGreen = !ledGreen;
    }
    //-------------------------------------------------------------
    
    //--функція зміни стану світлодіода на PA_9--------------------
    static void flip2(void)
    {    
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9);
    }
    //-------------------------------------------------------------
    
  3. Натисніть кнопку "Build program". Перший раз будуватись програма буде довго (декілька хвилин). Будуть завантажуватись всі бібліотеки, залежності і драйвери, які входять до MbedOS. По завершенню компіляції натисніть кнопку "Run program". Ваша програма заллється до пам'яті мікроконтролеру і автоматично запуститься.
  4. З різною частотою заблимають світлодіоди. А запустивши якусь термінальну програму і налаштував її на COM port, до якого під'єднано ваш Nucleo, та швидкість 115200 побачите там лічильник секунд:
    Термінал

Короткий огляд інтерфейсу Mbed Studio IDE

Інтерфейс Mbed Studio IDE
  1. Яка зараз активна програма для розробки;
  2. Яка плата під'єднана для розробки;
  3. Який профіль розробки: debug, develop, release;
  4. Компілювання програми;
  5. Заливка і запуск програми на мікроконтролері;
  6. Поле для редагування коду;
  7. Дерево проекту.

Немає коментарів:

Дописати коментар