Working LVGL.
continuous-integration/drone/push Build is passing Details

This commit is contained in:
imi415 2021-03-03 23:52:47 +08:00
parent 37bfc7094a
commit 68f07b8895
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
16 changed files with 325 additions and 43 deletions

View File

@ -14,7 +14,7 @@ steps:
- mkdir build
- cd build
- cmake -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake ..
- make
- make STM32H750XB_Hello_RAM.elf
image_pull_secrets:
- pull-secret

View File

@ -28,6 +28,7 @@ set(C_SOURCES
"Core/Src/user_lvgl_impl.c"
"Core/Src/user_printf_impl.c"
"Core/Src/tasks/user_hello_task.c"
"Core/Src/tasks/user_lvgl_task.c"
"Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c"
"Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c"
"Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c"

View File

@ -320,11 +320,11 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
* LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail
* LV_LOG_LEVEL_NONE Do not log anything
*/
# define LV_LOG_LEVEL LV_LOG_LEVEL_INFO
#define LV_LOG_LEVEL LV_LOG_LEVEL_INFO
/* 1: Print the log with 'printf';
* 0: user need to register a callback with `lv_log_register_print_cb`*/
# define LV_LOG_PRINTF 0
#define LV_LOG_PRINTF 0
#endif /*LV_USE_LOG*/
/*=================
@ -386,7 +386,7 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
#define LV_FONT_MONTSERRAT_18 0
#define LV_FONT_MONTSERRAT_20 0
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0
#define LV_FONT_MONTSERRAT_24 1
#define LV_FONT_MONTSERRAT_26 0
#define LV_FONT_MONTSERRAT_28 0
#define LV_FONT_MONTSERRAT_30 0
@ -477,10 +477,10 @@ typedef void * lv_font_user_data_t;
#define LV_THEME_DEFAULT_COLOR_PRIMARY lv_color_hex(0x01a2b1)
#define LV_THEME_DEFAULT_COLOR_SECONDARY lv_color_hex(0x44d1b6)
#define LV_THEME_DEFAULT_FLAG LV_THEME_MATERIAL_FLAG_LIGHT
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_14
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_14
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_14
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_14
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_24
#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_24
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_24
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_24
/*=================
* Text settings

View File

@ -56,6 +56,7 @@ void DebugMon_Handler(void);
void PVD_AVD_IRQHandler(void);
void FLASH_IRQHandler(void);
void RCC_IRQHandler(void);
void DMA1_Stream0_IRQHandler(void);
void TIM2_IRQHandler(void);
void TIM3_IRQHandler(void);
void USART1_IRQHandler(void);

View File

@ -6,5 +6,7 @@
#include "lvgl.h"
void user_lvgl_impl_log_cb(lv_log_level_t level, const char *file, uint32_t line, const char *fn_name, const char *dsc);
void user_lvgl_impl_flush_cb(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p);
void user_lvgl_impl_clean_dcache_cb(lv_disp_drv_t *disp_drv);
#endif

View File

@ -3,10 +3,23 @@
#include "cmsis_os2.h"
#define USER_LVGL_EVENT_FLAG_READY 0x00000001
void user_tasks_init(void);
extern osThreadId_t g_user_hello_task_handle;
extern osThreadAttr_t g_user_hello_task_attributes;
void user_hello_task(void * argument);
void user_hello_task(void *argument);
extern osThreadId_t g_user_lvgl_task_handle;
extern osThreadAttr_t g_user_lvgl_task_attributes;
extern osMutexId_t g_user_lvgl_mutex_handle;
extern osMutexAttr_t g_user_lvgl_mutex_attributes;
extern osEventFlagsId_t g_user_lvgl_event_handle;
void user_lvgl_task(void *argument);
#endif

View File

@ -53,6 +53,7 @@ TIM_HandleTypeDef htim3;
UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_memtomem_dma1_stream0;
SDRAM_HandleTypeDef hsdram1;
/* Definitions for defaultTask */
@ -71,6 +72,7 @@ void SystemClock_Config(void);
void PeriphCommonClock_Config(void);
static void MPU_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_RTC_Init(void);
static void MX_TIM3_Init(void);
static void MX_TIM2_Init(void);
@ -128,6 +130,7 @@ int main(void)
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_RTC_Init();
MX_TIM3_Init();
MX_TIM2_Init();
@ -261,7 +264,7 @@ void PeriphCommonClock_Config(void)
PeriphClkInitStruct.PLL3.PLL3N = 172;
PeriphClkInitStruct.PLL3.PLL3P = 2;
PeriphClkInitStruct.PLL3.PLL3Q = 4;
PeriphClkInitStruct.PLL3.PLL3R = 10;
PeriphClkInitStruct.PLL3.PLL3R = 6;
PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;
PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOMEDIUM;
PeriphClkInitStruct.PLL3.PLL3FRACN = 1762;
@ -568,6 +571,43 @@ static void MX_USART1_UART_Init(void)
}
/**
* Enable DMA controller clock
* Configure DMA for memory to memory transfers
* hdma_memtomem_dma1_stream0
*/
static void MX_DMA_Init(void)
{
/* DMA controller clock enable */
__HAL_RCC_DMA1_CLK_ENABLE();
/* Configure DMA request hdma_memtomem_dma1_stream0 on DMA1_Stream0 */
hdma_memtomem_dma1_stream0.Instance = DMA1_Stream0;
hdma_memtomem_dma1_stream0.Init.Request = DMA_REQUEST_MEM2MEM;
hdma_memtomem_dma1_stream0.Init.Direction = DMA_MEMORY_TO_MEMORY;
hdma_memtomem_dma1_stream0.Init.PeriphInc = DMA_PINC_ENABLE;
hdma_memtomem_dma1_stream0.Init.MemInc = DMA_MINC_ENABLE;
hdma_memtomem_dma1_stream0.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_memtomem_dma1_stream0.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
hdma_memtomem_dma1_stream0.Init.Mode = DMA_NORMAL;
hdma_memtomem_dma1_stream0.Init.Priority = DMA_PRIORITY_LOW;
hdma_memtomem_dma1_stream0.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
hdma_memtomem_dma1_stream0.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_memtomem_dma1_stream0.Init.MemBurst = DMA_MBURST_SINGLE;
hdma_memtomem_dma1_stream0.Init.PeriphBurst = DMA_PBURST_SINGLE;
if (HAL_DMA_Init(&hdma_memtomem_dma1_stream0) != HAL_OK)
{
Error_Handler( );
}
/* DMA interrupt init */
/* DMA1_Stream0_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
}
/* FMC initialization function */
static void MX_FMC_Init(void)
{

View File

@ -151,7 +151,7 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)
|GPIO_PIN_7|GPIO_PIN_2|GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOK, &GPIO_InitStruct);
@ -161,14 +161,14 @@ void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)
|GPIO_PIN_5|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
GPIO_InitStruct.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);

View File

@ -56,6 +56,7 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
extern DMA_HandleTypeDef hdma_memtomem_dma1_stream0;
extern SDRAM_HandleTypeDef hsdram1;
extern LTDC_HandleTypeDef hltdc;
extern TIM_HandleTypeDef htim2;
@ -207,6 +208,20 @@ void RCC_IRQHandler(void)
/* USER CODE END RCC_IRQn 1 */
}
/**
* @brief This function handles DMA1 stream0 global interrupt.
*/
void DMA1_Stream0_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
/* USER CODE END DMA1_Stream0_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_memtomem_dma1_stream0);
/* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
/* USER CODE END DMA1_Stream0_IRQn 1 */
}
/**
* @brief This function handles TIM2 global interrupt.
*/

View File

@ -6,10 +6,6 @@
#include "user_tasks.h"
// SDRAM BANK 2, default mapping
#define SDRAM_START 0xD0000000
#define SDRAM_END 0xD4000000
osThreadId_t g_user_hello_task_handle;
osThreadAttr_t g_user_hello_task_attributes = {
.name = "HELO",
@ -17,10 +13,26 @@ osThreadAttr_t g_user_hello_task_attributes = {
.priority = (osPriority_t) osPriorityNormal,
};
void user_hello_task(void * argument) {
LV_LOG_INFO("Hello task initialized.");
void user_hello_task(void *argument) {
LV_LOG_INFO("Hello task started.");
if(osMutexAcquire(g_user_lvgl_mutex_handle, osWaitForever) == osOK) {
lv_obj_t * label1 = lv_label_create(lv_scr_act(), NULL);
lv_label_set_long_mode(label1, LV_LABEL_LONG_BREAK); /*Break the long lines*/
lv_label_set_recolor(label1, true); /*Enable re-coloring by commands in the text*/
lv_label_set_align(label1, LV_LABEL_ALIGN_CENTER); /*Center aligned lines*/
lv_label_set_text(label1, "#0000ff Re-color# #ff00ff words# #ff0000 of a# label "
"and wrap long text automatically.");
lv_obj_set_width(label1, 200);
lv_obj_align(label1, NULL, LV_ALIGN_CENTER, 0, -30);
lv_obj_t * label2 = lv_label_create(lv_scr_act(), NULL);
lv_label_set_long_mode(label2, LV_LABEL_LONG_SROLL_CIRC); /*Circular scroll*/
lv_obj_set_width(label2, 200);
lv_label_set_text(label2, "It is a circularly scrolling text. ");
lv_obj_align(label2, NULL, LV_ALIGN_CENTER, 0, 40);
osMutexRelease(g_user_lvgl_mutex_handle);
}
for(;;) {
LV_LOG_INFO("Hello world @%ld.", osKernelGetTickCount());
osDelay(1000);
}
}

View File

@ -0,0 +1,89 @@
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include "lvgl.h"
#include "user_lvgl_impl.h"
#include "user_tasks.h"
osThreadId_t g_user_lvgl_tick_handle;
osThreadAttr_t g_user_lvgl_tick_attributes = {
.name = "LV_TICK",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityAboveNormal
};
osThreadId_t g_user_lvgl_task_handle;
osThreadAttr_t g_user_lvgl_task_attributes = {
.name = "LV_TASK",
.stack_size = 384 * 4,
.priority = (osPriority_t) osPriorityBelowNormal
};
osMutexId_t g_user_lvgl_mutex_handle;
osMutexAttr_t g_user_lvgl_mutex_attributes = {
.name = "LV_MUTX",
.attr_bits = osMutexRecursive | osMutexPrioInherit,
.cb_mem = NULL,
.cb_size = 0U
};
osEventFlagsId_t g_user_lvgl_event_handle;
lv_disp_buf_t g_user_lvgl_disp_buf;
lv_disp_t *g_user_lvgl_disp;
void user_lvgl_tick(void *argument) {
for(;;) {
if(osMutexAcquire(g_user_lvgl_mutex_handle, 1000) == osOK) {
lv_tick_inc(27);
osMutexRelease(g_user_lvgl_mutex_handle);
} else {
LV_LOG_INFO("Lock mutex failed.");
}
osDelay(27);
}
}
void user_lvgl_task(void *argument) {
g_user_lvgl_mutex_handle = osMutexNew(&g_user_lvgl_mutex_attributes);
if(g_user_lvgl_mutex_handle == NULL) {
osThreadExit();
}
lv_init();
lv_log_register_print_cb(user_lvgl_impl_log_cb);
lv_disp_buf_init(&g_user_lvgl_disp_buf, (void *)0xD0100000, (void *)0xD0300000, 800 * 480);
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.buffer = &g_user_lvgl_disp_buf;
disp_drv.flush_cb = user_lvgl_impl_flush_cb;
disp_drv.clean_dcache_cb = user_lvgl_impl_clean_dcache_cb;
g_user_lvgl_disp = lv_disp_drv_register(&disp_drv);
g_user_lvgl_tick_handle = osThreadNew(user_lvgl_tick, NULL, &g_user_lvgl_tick_attributes);
if(g_user_lvgl_tick_handle == NULL) {
LV_LOG_ERROR("Failed to create tick thread.");
osThreadExit();
}
LV_LOG_INFO("LVGL initialized at %ld, stack avail: %ldbytes.", osKernelGetTickCount(), osThreadGetStackSpace(g_user_lvgl_task_handle));
osEventFlagsSet(g_user_lvgl_event_handle, USER_LVGL_EVENT_FLAG_READY);
for(;;) {
if(osMutexAcquire(g_user_lvgl_mutex_handle, 1000) == osOK) {
lv_task_handler();
osMutexRelease(g_user_lvgl_mutex_handle);
} else {
LV_LOG_INFO("Lock mutex failed.");
}
osDelay(25);
}
}

View File

@ -1,14 +1,29 @@
#include "stm32h7xx_hal.h"
#include "printf.h"
#include "user_lvgl_impl.h"
extern LTDC_HandleTypeDef hltdc;
void user_lvgl_impl_log_cb(lv_log_level_t level, const char *file, uint32_t line, const char *fn_name, const char *dsc) {
if(level == LV_LOG_LEVEL_ERROR) printf("\033[31m [ERROR] ");
if(level == LV_LOG_LEVEL_WARN) printf("\033[33m [ WARN] ");
if(level == LV_LOG_LEVEL_INFO) printf("\033[34m [ INFO] ");
if(level == LV_LOG_LEVEL_TRACE) printf("\033[36m [TRACE] ");
if(level == LV_LOG_LEVEL_ERROR) printf("\033[31m[ERROR] ");
if(level == LV_LOG_LEVEL_WARN) printf("\033[33m[ WARN] ");
if(level == LV_LOG_LEVEL_INFO) printf("\033[34m[ INFO] ");
if(level == LV_LOG_LEVEL_TRACE) printf("\033[36m[TRACE] ");
printf("%s:%d, %s(): %s", file, line, fn_name, dsc);
printf("\033[m\r\n");
}
void user_lvgl_impl_flush_cb(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p) {
if(HAL_LTDC_SetAddress(&hltdc, (uint32_t)color_p, LTDC_LAYER_1) != HAL_OK) {
printf("Set LTDC address error.\r\n");
}
lv_disp_flush_ready(disp_drv);
}
void user_lvgl_impl_clean_dcache_cb(lv_disp_drv_t *disp_drv) {
SCB_CleanInvalidateDCache_by_Addr((uint32_t *)0xD0100000, 0x00400000);
}

View File

@ -1,12 +1,22 @@
#include "lvgl.h"
#include "user_lvgl_impl.h"
#include "main.h"
#include "user_tasks.h"
void user_tasks_init(void) {
lv_init();
lv_log_register_print_cb(user_lvgl_impl_log_cb);
// Create LVGL event flag.
g_user_lvgl_event_handle = osEventFlagsNew(NULL);
if(g_user_lvgl_event_handle == NULL) {
osThreadExit();
}
g_user_lvgl_task_handle = osThreadNew(user_lvgl_task, NULL, &g_user_lvgl_task_attributes);
if(g_user_lvgl_task_handle == NULL) Error_Handler();
// Wait here to make sure LVGL is initialized.
osEventFlagsWait(g_user_lvgl_event_handle, USER_LVGL_EVENT_FLAG_READY, 0U, osWaitForever);
g_user_hello_task_handle = osThreadNew(user_hello_task, NULL, &g_user_hello_task_attributes);
if(g_user_hello_task_handle == NULL) Error_Handler();
}

View File

@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.13.0-B3] date: [Wed Mar 03 00:08:05 CST 2021]
# File automatically-generated by tool: [projectgenerator] version: [3.13.0-B3] date: [Wed Mar 03 23:47:59 CST 2021]
##########################################################################################################################
# ------------------------------------------------

View File

@ -4,6 +4,9 @@
Fire H750XB board
## Build System
[![Build Status](https://ci.minori.work/api/badges/STM32_Projects/STM32H750XB_Hello/status.svg)](https://ci.minori.work/STM32_Projects/STM32H750XB_Hello)
CMake v3.10+
Build Instructions

View File

@ -33,6 +33,29 @@ CORTEX_M7.Size-Cortex_Memory_Protection_Unit_Region3_Settings=MPU_REGION_SIZE_64
CORTEX_M7.TypeExtField-Cortex_Memory_Protection_Unit_Region1_Settings=MPU_TEX_LEVEL1
CORTEX_M7.TypeExtField-Cortex_Memory_Protection_Unit_Region2_Settings=MPU_TEX_LEVEL1
CORTEX_M7.TypeExtField-Cortex_Memory_Protection_Unit_Region3_Settings=MPU_TEX_LEVEL1
Dma.MEMTOMEM.0.Direction=DMA_MEMORY_TO_MEMORY
Dma.MEMTOMEM.0.EventEnable=DISABLE
Dma.MEMTOMEM.0.FIFOMode=DMA_FIFOMODE_ENABLE
Dma.MEMTOMEM.0.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL
Dma.MEMTOMEM.0.Instance=DMA1_Stream0
Dma.MEMTOMEM.0.MemBurst=DMA_MBURST_SINGLE
Dma.MEMTOMEM.0.MemDataAlignment=DMA_MDATAALIGN_WORD
Dma.MEMTOMEM.0.MemInc=DMA_MINC_ENABLE
Dma.MEMTOMEM.0.Mode=DMA_NORMAL
Dma.MEMTOMEM.0.PeriphBurst=DMA_PBURST_SINGLE
Dma.MEMTOMEM.0.PeriphDataAlignment=DMA_PDATAALIGN_WORD
Dma.MEMTOMEM.0.PeriphInc=DMA_PINC_ENABLE
Dma.MEMTOMEM.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.MEMTOMEM.0.Priority=DMA_PRIORITY_LOW
Dma.MEMTOMEM.0.RequestNumber=1
Dma.MEMTOMEM.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.MEMTOMEM.0.SignalID=NONE
Dma.MEMTOMEM.0.SyncEnable=DISABLE
Dma.MEMTOMEM.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.MEMTOMEM.0.SyncRequestNumber=1
Dma.MEMTOMEM.0.SyncSignalID=NONE
Dma.Request0=MEMTOMEM
Dma.RequestsNb=1
FMC.CASLatency1=FMC_SDRAM_CAS_LATENCY_2
FMC.ColumnBitsNumber1=FMC_SDRAM_COLUMN_BITS_NUM_9
FMC.ExitSelfRefreshDelay1=5
@ -77,17 +100,18 @@ LTDC.WindowY1_L0=479
Mcu.Family=STM32H7
Mcu.IP0=CORTEX_M7
Mcu.IP1=DEBUG
Mcu.IP10=TIM3
Mcu.IP11=USART1
Mcu.IP2=FMC
Mcu.IP3=FREERTOS
Mcu.IP4=LTDC
Mcu.IP5=NVIC
Mcu.IP6=RCC
Mcu.IP7=RTC
Mcu.IP8=SYS
Mcu.IP9=TIM2
Mcu.IPNb=12
Mcu.IP10=TIM2
Mcu.IP11=TIM3
Mcu.IP12=USART1
Mcu.IP2=DMA
Mcu.IP3=FMC
Mcu.IP4=FREERTOS
Mcu.IP5=LTDC
Mcu.IP6=NVIC
Mcu.IP7=RCC
Mcu.IP8=RTC
Mcu.IP9=SYS
Mcu.IPNb=13
Mcu.Name=STM32H750XBHx
Mcu.Package=TFBGA240
Mcu.Pin0=PI6
@ -201,6 +225,7 @@ Mcu.UserName=STM32H750XBHx
MxCube.Version=6.2.0
MxDb.Version=DB.6.0.20
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.FLASH_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
NVIC.FMC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
@ -367,15 +392,23 @@ PI1.Locked=true
PI1.Signal=FMC_D25
PI10.Locked=true
PI10.Signal=FMC_D31
PI12.GPIOParameters=GPIO_Speed
PI12.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PI12.Locked=true
PI12.Mode=RGB888
PI12.Signal=LTDC_HSYNC
PI13.GPIOParameters=GPIO_Speed
PI13.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PI13.Locked=true
PI13.Mode=RGB888
PI13.Signal=LTDC_VSYNC
PI14.GPIOParameters=GPIO_Speed
PI14.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PI14.Locked=true
PI14.Mode=RGB888
PI14.Signal=LTDC_CLK
PI15.GPIOParameters=GPIO_Speed
PI15.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PI15.Locked=true
PI15.Mode=RGB888
PI15.Signal=LTDC_R0
@ -393,75 +426,123 @@ PI7.Locked=true
PI7.Signal=FMC_D29
PI9.Locked=true
PI9.Signal=FMC_D30
PJ0.GPIOParameters=GPIO_Speed
PJ0.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ0.Locked=true
PJ0.Mode=RGB888
PJ0.Signal=LTDC_R1
PJ1.GPIOParameters=GPIO_Speed
PJ1.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ1.Locked=true
PJ1.Mode=RGB888
PJ1.Signal=LTDC_R2
PJ10.GPIOParameters=GPIO_Speed
PJ10.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ10.Locked=true
PJ10.Mode=RGB888
PJ10.Signal=LTDC_G3
PJ11.GPIOParameters=GPIO_Speed
PJ11.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ11.Locked=true
PJ11.Mode=RGB888
PJ11.Signal=LTDC_G4
PJ12.GPIOParameters=GPIO_Speed
PJ12.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ12.Locked=true
PJ12.Mode=RGB888
PJ12.Signal=LTDC_B0
PJ13.GPIOParameters=GPIO_Speed
PJ13.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ13.Locked=true
PJ13.Mode=RGB888
PJ13.Signal=LTDC_B1
PJ14.GPIOParameters=GPIO_Speed
PJ14.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ14.Locked=true
PJ14.Mode=RGB888
PJ14.Signal=LTDC_B2
PJ15.GPIOParameters=GPIO_Speed
PJ15.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ15.Locked=true
PJ15.Mode=RGB888
PJ15.Signal=LTDC_B3
PJ2.GPIOParameters=GPIO_Speed
PJ2.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ2.Locked=true
PJ2.Mode=RGB888
PJ2.Signal=LTDC_R3
PJ3.GPIOParameters=GPIO_Speed
PJ3.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ3.Locked=true
PJ3.Mode=RGB888
PJ3.Signal=LTDC_R4
PJ4.GPIOParameters=GPIO_Speed
PJ4.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ4.Locked=true
PJ4.Mode=RGB888
PJ4.Signal=LTDC_R5
PJ5.GPIOParameters=GPIO_Speed
PJ5.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ5.Locked=true
PJ5.Mode=RGB888
PJ5.Signal=LTDC_R6
PJ6.GPIOParameters=GPIO_Speed
PJ6.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ6.Locked=true
PJ6.Mode=RGB888
PJ6.Signal=LTDC_R7
PJ7.GPIOParameters=GPIO_Speed
PJ7.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ7.Locked=true
PJ7.Mode=RGB888
PJ7.Signal=LTDC_G0
PJ8.GPIOParameters=GPIO_Speed
PJ8.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ8.Locked=true
PJ8.Mode=RGB888
PJ8.Signal=LTDC_G1
PJ9.GPIOParameters=GPIO_Speed
PJ9.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PJ9.Locked=true
PJ9.Mode=RGB888
PJ9.Signal=LTDC_G2
PK0.GPIOParameters=GPIO_Speed
PK0.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK0.Locked=true
PK0.Mode=RGB888
PK0.Signal=LTDC_G5
PK1.GPIOParameters=GPIO_Speed
PK1.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK1.Locked=true
PK1.Mode=RGB888
PK1.Signal=LTDC_G6
PK2.GPIOParameters=GPIO_Speed
PK2.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK2.Locked=true
PK2.Mode=RGB888
PK2.Signal=LTDC_G7
PK3.GPIOParameters=GPIO_Speed
PK3.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK3.Locked=true
PK3.Mode=RGB888
PK3.Signal=LTDC_B4
PK4.GPIOParameters=GPIO_Speed
PK4.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK4.Locked=true
PK4.Mode=RGB888
PK4.Signal=LTDC_B5
PK5.GPIOParameters=GPIO_Speed
PK5.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK5.Locked=true
PK5.Mode=RGB888
PK5.Signal=LTDC_B6
PK6.GPIOParameters=GPIO_Speed
PK6.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK6.Locked=true
PK6.Mode=RGB888
PK6.Signal=LTDC_B7
PK7.GPIOParameters=GPIO_Speed
PK7.GPIO_Speed=GPIO_SPEED_FREQ_MEDIUM
PK7.Locked=true
PK7.Mode=RGB888
PK7.Signal=LTDC_DE
@ -494,7 +575,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=Makefile
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_RTC_Init-RTC-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM2_Init-TIM2-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_FMC_Init-FMC-false-HAL-true,8-MX_USART1_UART_Init-USART1-false-HAL-true,9-MX_LTDC_Init-LTDC-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=133000000
RCC.AHB12Freq_Value=60000000
RCC.AHB4Freq_Value=60000000
@ -526,8 +607,8 @@ RCC.DIVQ3=4
RCC.DIVQ3Freq_Value=43053771.97265625
RCC.DIVR1Freq_Value=120000000
RCC.DIVR2Freq_Value=133000000
RCC.DIVR3=10
RCC.DIVR3Freq_Value=17221508.7890625
RCC.DIVR3=6
RCC.DIVR3Freq_Value=28702514.6484375
RCC.EnbaleCSS=true
RCC.FDCANFreq_Value=120000000
RCC.FMCCLockSelection=RCC_FMCCLKSOURCE_PLL2
@ -544,7 +625,7 @@ RCC.LPTIM1Freq_Value=60000000
RCC.LPTIM2Freq_Value=60000000
RCC.LPTIM345Freq_Value=60000000
RCC.LPUART1Freq_Value=60000000
RCC.LTDCFreq_Value=17221508.7890625
RCC.LTDCFreq_Value=28702514.6484375
RCC.MCO1PinFreq_Value=64000000
RCC.MCO2PinFreq_Value=120000000
RCC.PLL3FRACN=1762