diff --git a/.drone.yml b/.drone.yml index b3e1508..1021942 100644 --- a/.drone.yml +++ b/.drone.yml @@ -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 diff --git a/CMakeLists.txt b/CMakeLists.txt index b848bba..de7cf11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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" diff --git a/Core/Inc/lv_conf.h b/Core/Inc/lv_conf.h index 9321c7e..a8edc18 100644 --- a/Core/Inc/lv_conf.h +++ b/Core/Inc/lv_conf.h @@ -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 diff --git a/Core/Inc/stm32h7xx_it.h b/Core/Inc/stm32h7xx_it.h index 106e420..1a6dbba 100644 --- a/Core/Inc/stm32h7xx_it.h +++ b/Core/Inc/stm32h7xx_it.h @@ -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); diff --git a/Core/Inc/user_lvgl_impl.h b/Core/Inc/user_lvgl_impl.h index 62236f8..595e0e2 100644 --- a/Core/Inc/user_lvgl_impl.h +++ b/Core/Inc/user_lvgl_impl.h @@ -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 \ No newline at end of file diff --git a/Core/Inc/user_tasks.h b/Core/Inc/user_tasks.h index f061021..780fe94 100644 --- a/Core/Inc/user_tasks.h +++ b/Core/Inc/user_tasks.h @@ -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 \ No newline at end of file diff --git a/Core/Src/main.c b/Core/Src/main.c index 978c8e2..e1584e7 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -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) { diff --git a/Core/Src/stm32h7xx_hal_msp.c b/Core/Src/stm32h7xx_hal_msp.c index 2cbdcc2..9764931 100644 --- a/Core/Src/stm32h7xx_hal_msp.c +++ b/Core/Src/stm32h7xx_hal_msp.c @@ -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); diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index edf61db..97299c7 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -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. */ diff --git a/Core/Src/tasks/user_hello_task.c b/Core/Src/tasks/user_hello_task.c index e7464b9..cb8426e 100644 --- a/Core/Src/tasks/user_hello_task.c +++ b/Core/Src/tasks/user_hello_task.c @@ -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); } } \ No newline at end of file diff --git a/Core/Src/tasks/user_lvgl_task.c b/Core/Src/tasks/user_lvgl_task.c new file mode 100644 index 0000000..2ed41fa --- /dev/null +++ b/Core/Src/tasks/user_lvgl_task.c @@ -0,0 +1,89 @@ +#include +#include +#include + +#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); + } +} \ No newline at end of file diff --git a/Core/Src/user_lvgl_impl.c b/Core/Src/user_lvgl_impl.c index 9b964a4..847826d 100644 --- a/Core/Src/user_lvgl_impl.c +++ b/Core/Src/user_lvgl_impl.c @@ -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); } \ No newline at end of file diff --git a/Core/Src/user_tasks.c b/Core/Src/user_tasks.c index 1f50a77..3fb2a19 100644 --- a/Core/Src/user_tasks.c +++ b/Core/Src/user_tasks.c @@ -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(); } \ No newline at end of file diff --git a/Makefile b/Makefile index 95e3c7a..60cdf7f 100644 --- a/Makefile +++ b/Makefile @@ -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] ########################################################################################################################## # ------------------------------------------------ diff --git a/README.md b/README.md index 072c266..4531880 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/STM32H750XB_Hello.ioc b/STM32H750XB_Hello.ioc index cc5665e..8dd7a5d 100644 --- a/STM32H750XB_Hello.ioc +++ b/STM32H750XB_Hello.ioc @@ -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