Урок 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 */
Опять соберём код и прошьём контроллер, дисплей должен окраситься в красный цвет
Теперь давайте попробуем помигать окрашенными квадратиками случайного цвета с разной частотой в разных задачах. Сначала исправим окраску в черный цвет
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 */
}
После сборки и прошивки должно получиться интересное перемигивание. Если Вы посмотрите видеоурок, я думаю Вы это оцените
Предыдущая часть Программирование МК STM32 Следующий урок
Отладочную плату можно приобрести здесь STM32F746G-DISCOVERY
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
В следующей части занятия мы продолжим работу с нашим проектом и испытаем наш код на практике, увидев на дисплее какой-нибудь тест.
И где текст?
Так тест или текст?
компилятор ругается на строку с «LCD_COLOR_TRANSPARENT»
Добрый день! Запустил на 429-ой (немного поплясать с бубном пришлось), только cubeide ругается на SDRAM_DEVICE_ADDR.
Спасибо за уроки!