From 6fdff30115e5e48a4adaf44727f38684021c6139 Mon Sep 17 00:00:00 2001 From: imi415 Date: Sun, 28 Feb 2021 22:18:24 +0800 Subject: [PATCH] Added printf, enabled UART, added SDRAM tests. --- .drone.yml | 20 +++++++++++++++++ .gitmodules | 3 +++ CMakeLists.txt | 5 +++++ Core/Inc/user_tasks.h | 12 ++++++++++ Core/Src/main.c | 5 +++++ Core/Src/printf_impl.c | 9 ++++++++ Core/Src/tasks/sdram_task.c | 41 ++++++++++++++++++++++++++++++++++ Core/Src/user_tasks.c | 5 +++++ Middlewares/Third_Party/printf | 1 + 9 files changed, 101 insertions(+) create mode 100644 .drone.yml create mode 100644 .gitmodules create mode 100644 Core/Inc/user_tasks.h create mode 100644 Core/Src/printf_impl.c create mode 100644 Core/Src/tasks/sdram_task.c create mode 100644 Core/Src/user_tasks.c create mode 160000 Middlewares/Third_Party/printf diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..b3e1508 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,20 @@ +kind: pipeline +type: kubernetes +name: default + +steps: +- name: submodules + image: alpine/git + commands: + - git submodule update --recursive --init + +- name: build + image: registry.aws.minori.work/imi415/arm-none-toolchain:latest + commands: + - mkdir build + - cd build + - cmake -DCMAKE_TOOLCHAIN_FILE=arm-none-eabi.cmake .. + - make + +image_pull_secrets: +- pull-secret diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..854bc13 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Middlewares/Third_Party/printf"] + path = Middlewares/Third_Party/printf + url = https://github.com/mpaland/printf.git diff --git a/CMakeLists.txt b/CMakeLists.txt index a805174..066d2ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,10 @@ set(C_SOURCES "Core/Src/stm32h7xx_it.c" "Core/Src/stm32h7xx_hal_msp.c" "Core/Src/stm32h7xx_hal_timebase_tim.c" + "Core/Src/user_tasks.c" + "Core/Src/tasks/sdram_task.c" + "Core/Src/printf_impl.c" + "Middlewares/Third_Party/printf/printf.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" @@ -81,6 +85,7 @@ include_directories( "Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F" "Drivers/CMSIS/Device/ST/STM32H7xx/Include" "Drivers/CMSIS/Include" + "Middlewares/Third_Party/printf" ) # Final compiler flags diff --git a/Core/Inc/user_tasks.h b/Core/Inc/user_tasks.h new file mode 100644 index 0000000..5a7f960 --- /dev/null +++ b/Core/Inc/user_tasks.h @@ -0,0 +1,12 @@ +#ifndef __USER_TASKS_H +#define __USER_TASKS_H + +#include "cmsis_os2.h" + +void user_tasks_init(void); + +extern osThreadId_t g_sdram_task_handle; +extern osThreadAttr_t g_sdram_task_attributes; +void sdram_task(void * argument); + +#endif \ No newline at end of file diff --git a/Core/Src/main.c b/Core/Src/main.c index 538a8d0..0f48a05 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -24,6 +24,8 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "user_tasks.h" + /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -584,6 +586,9 @@ static void MX_GPIO_Init(void) void StartDefaultTask(void *argument) { /* USER CODE BEGIN 5 */ + + user_tasks_init(); + HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4); diff --git a/Core/Src/printf_impl.c b/Core/Src/printf_impl.c new file mode 100644 index 0000000..6451d5e --- /dev/null +++ b/Core/Src/printf_impl.c @@ -0,0 +1,9 @@ +#include + +#include "stm32h7xx_hal.h" + +extern UART_HandleTypeDef huart1; + +void _putchar(char character) { + HAL_UART_Transmit(&huart1, (uint8_t *)&character, 0x01, 1000); +} \ No newline at end of file diff --git a/Core/Src/tasks/sdram_task.c b/Core/Src/tasks/sdram_task.c new file mode 100644 index 0000000..67bd6df --- /dev/null +++ b/Core/Src/tasks/sdram_task.c @@ -0,0 +1,41 @@ +#include +#include +#include + +#include "printf.h" + +#include "user_tasks.h" + +// SDRAM BANK 2, default mapping +#define SDRAM_START 0xD0000000 +#define SDRAM_END 0xD4000000 + +osThreadId_t g_sdram_task_handle; +osThreadAttr_t g_sdram_task_attributes = { + .name = "SDRAMT", + .stack_size = 256 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; + +void sdram_task(void * argument) { + printf("SDRAM test started...\r\n"); + + for(uint32_t i = SDRAM_START; i < SDRAM_END; i += 4) { + *(uint32_t *)i = i; + if(i % 0x10000 == 0) { + printf("Write: 0x%08lx\r\n", i); + } + } + for(uint32_t i = SDRAM_START; i < SDRAM_END; i += 4) { + if(*(uint32_t *)i != i) { + printf("Verify err: 0x%08lx\r\n", i); + break; + } + if(i % 0x10000 == 0) { + printf("Verify: 0x%08lx\r\n", i); + } + } + printf("SDRAM test completed.\r\n"); + + osThreadExit(); +} \ No newline at end of file diff --git a/Core/Src/user_tasks.c b/Core/Src/user_tasks.c new file mode 100644 index 0000000..5dad245 --- /dev/null +++ b/Core/Src/user_tasks.c @@ -0,0 +1,5 @@ +#include "user_tasks.h" + +void user_tasks_init(void) { + g_sdram_task_handle = osThreadNew(sdram_task, NULL, &g_sdram_task_attributes); +} \ No newline at end of file diff --git a/Middlewares/Third_Party/printf b/Middlewares/Third_Party/printf new file mode 160000 index 0000000..d3b9846 --- /dev/null +++ b/Middlewares/Third_Party/printf @@ -0,0 +1 @@ +Subproject commit d3b984684bb8a8bdc48cc7a1abecb93ce59bbe3e