STM Урок 56. System Workbench. Подключаем библиотеку BSP. Часть 2



Урок 56

 

Часть 2

 

System Workbench. Подключаем библиотеку BSP

 

В предыдущей части занятия мы кратко узнали о библиотеке BSP, создали и настроили новый проект в Cube MX, подключили файлы библиотеки BSP в проект и попробовали собрать проект с подключенной библиотекой BSP.

В файле main.с подключим нужные файлы библиотеки BSP

 

/* USER CODE BEGIN Includes */

#include «stm32746g_discovery.h»

#include «stm32746g_discovery_lcd.h»

/* USER CODE END Includes */

 

Объявим буфер в main.c

 

/* USER CODE BEGIN PV */

/* Private variables ———————————————————*/

#define LCD_FRAME_BUFFER                SDRAM_DEVICE_ADDR

 

Вызовем инициализацию дисплея

 

/* USER CODE BEGIN 2 */

  BSP_LCD_Init();

/* USER CODE END 2 */

 

Соберём код и прошьём контроллер. Должен дисплей потухнуть.

Допишем код

 

        BSP_LCD_Init();

        BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER,LCD_FRAME_BUFFER);

        BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);

        BSP_LCD_DisplayOn();

        BSP_LCD_Clear(LCD_COLOR_RED);

>

/* USER CODE END 2 */

 

 

Опять соберём код и прошьём контроллер, дисплей должен окраситься в красный цвет

 

image033

 

Теперь давайте попробуем помигать окрашенными квадратиками случайного цвета с разной частотой в разных задачах. Сначала исправим окраску в черный цвет

 

BSP_LCD_Clear(LCD_COLOR_BLACK);

 

Добавим в main.c вызов библиотеки

 

/* USER CODE BEGIN Includes */

#include <stdlib.h>

#include «stm32746g_discovery.h»

 

В первую задачу добавим код

 

void StartDefaultTask(void const * argument)

{

  /* USER CODE BEGIN 5 */

  /* Infinite loop */

  for(;;)

  {

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(0,136,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(0,0,96,136);

    osDelay(200);

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(0,0,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(0,136,96,136);

    osDelay(200);  }

  /* USER CODE END 5 */

}

 

 

В другие задачи скопируем то же самое, только несколько с другими координатами и с другими задержками

 

/* StartTask02 function */

void StartTask02(void const * argument)

{

  /* USER CODE BEGIN StartTask02 */

  /* Infinite loop */

  for(;;)

  {

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(96,136,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(96,0,96,136);

            osDelay(190);

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(96,0,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(96,136,96,136);

        osDelay(190);

  }

  /* USER CODE END StartTask02 */

}

/* StartTask03 function */

void StartTask03(void const * argument)

{

  /* USER CODE BEGIN StartTask03 */

  /* Infinite loop */

  for(;;)

  {

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(192,136,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(192,0,96,136);

        osDelay(180);

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(192,0,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(192,136,96,136);

        osDelay(180);

  }

  /* USER CODE END StartTask03 */

}

/* StartTask04 function */

void StartTask04(void const * argument)

{

  /* USER CODE BEGIN StartTask04 */

  /* Infinite loop */

  for(;;)

  {

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(288,136,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(288,0,96,136);

            osDelay(170);

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(288,0,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(288,136,96,136);

        osDelay(170);

  }

  /* USER CODE END StartTask04 */

}

/* StartTask05 function */

void StartTask05(void const * argument)

{

  /* USER CODE BEGIN StartTask05 */

  /* Infinite loop */

  for(;;)

  {

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(384,136,96,136);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(384,0,96,136);

        osDelay(160);

        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);

        BSP_LCD_FillRect(384,0,95,135);

        BSP_LCD_SetTextColor((uint32_t)(LCD_COLOR_TRANSPARENT|((rand()%256)<<16)|((rand()%256)<<8)|(rand()%256)));

        BSP_LCD_FillRect(384,136,95,271);

        osDelay(160);

  }

  /* USER CODE END StartTask05 */

}

 

После сборки и прошивки должно получиться интересное перемигивание. Если Вы посмотрите видеоурок, я думаю Вы это оцените

 

image33

 

 

Предыдущая часть Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Отладочную плату можно приобрести здесь 32F746G-DISCOVERY

 

 

Смотреть ВИДЕОУРОК

 

STM32 System Workbench. Подключаем библиотеку BSP

4 комментария на “STM Урок 56. System Workbench. Подключаем библиотеку BSP. Часть 2
  1. Дмитрий:

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

  2. Ан:

    компилятор ругается на строку с «LCD_COLOR_TRANSPARENT»

  3. megger380:

    Добрый день! Запустил на 429-ой (немного поплясать с бубном пришлось), только cubeide ругается на SDRAM_DEVICE_ADDR.
    Спасибо за уроки!

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

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

*