Brise

[STM32CubeMX] STM32F429-DISC0 LCD 출력하기 본문

MCU

[STM32CubeMX] STM32F429-DISC0 LCD 출력하기

naudhizb 2017. 4. 27. 22:55
반응형

위 동영상을 따라 만든 STM32F429보드용 STCubeMX 프로젝트 파일입니다. 

설정한 내용은 다음과 같습니다. 






위와 같이 설정하고 프로젝트 코드를 생성하면(필자의 경우 TrueStudio) 설정한 폴더에 코드가 생성됩니다..



생성된 코드는 비록 우리가 Discovery보드로 설정을 했더라도, Discovery 보드에서 사용할 수 있는 BSP코드들을 자동으로 포함해주지 않습니다. 


때문에 수동으로 BSP관련 코드들을 넣어주어야 합니다. 



이를 위하여 펌웨어를 저장한 폴더로 접근합니다.


STM32CubeMX에서는 기본적으로 사용자의 폴더 아래에 펌웨어를 저장합니다.

(C:\Users\${사용자 이름}\STM32Cube\Repository\STM32Cube_FW_F4_V1.16.0)



펌웨어 폴더는 다음과 같습니다. 


우리가 복사해야할 폴더는


Driver/BSP/Components

Driver/BSP/STM32F429I-Discovery

Utilities


입니다.


해당 폴더를 복사하여 프로젝트가 생성된 폴더에 붙여넣어줍시다. 




붙여 넣은 후 프로젝트를 실행하면 다음과 같은 트리로 프로젝트가 나옵니다.



이제 붙여넣은 BSP 폴더에 대한 Include Path를 잡아줍니다.


프로젝트를 선택한 뒤 Properties(M-<ENTER>) 를 누른뒤

C/C++ General -> Paths and Symbols를 선택한뒤

Include탭에 Add를 클릭 Workspace를 선택한뒤 프로젝트의 Driver/BSP/STM32F429I-Discovery를 선택합니다.


결과는 다음과 같습니다. 





다음으로 LCD를 구동하기 위한 예제 코드를 만듭니다.


/Driver/BSP/STM32F429I-Discovery 아래 있는 파일들을 참고하면 비교적 쉽게 만들 수 있습니다. 



include, 초기화, while구문을 작성하여 LCD를 사용할 수 있다. 


작성 코드는 다음과 같다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
 
/* USER CODE BEGIN Includes */
#include "stm32f429i_discovery_lcd.h"
/* USER CODE END Includes */
 
/* Private variables ---------------------------------------------------------*/
DMA2D_HandleTypeDef hdma2d;
 
I2C_HandleTypeDef hi2c3;
 
LTDC_HandleTypeDef hltdc;
 
SPI_HandleTypeDef hspi5;
 
TIM_HandleTypeDef htim2;
 
SDRAM_HandleTypeDef hsdram1;
 
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
 
/* USER CODE END PV */
 
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_DMA2D_Init(void);
static void MX_FMC_Init(void);
static void MX_I2C3_Init(void);
static void MX_LTDC_Init(void);
static void MX_SPI5_Init(void);
static void MX_TIM2_Init(void);
 
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
 
/* USER CODE END PFP */
 
/* USER CODE BEGIN 0 */
 
/* USER CODE END 0 */
 
int main(void)
{
 
  /* USER CODE BEGIN 1 */
 
  /* USER CODE END 1 */
 
  /* MCU Configuration----------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA2D_Init();
  MX_FMC_Init();
  MX_I2C3_Init();
  MX_LTDC_Init();
  MX_SPI5_Init();
  MX_TIM2_Init();
 
  /* USER CODE BEGIN 2 */
  BSP_LCD_Init();
  BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER, LCD_FRAME_BUFFER);
  BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER, LCD_FRAME_BUFFER);
  BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
  BSP_LCD_DisplayOn();
  BSP_LCD_Clear(LCD_COLOR_WHITE);
 
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      BSP_LCD_SetTextColor(LCD_COLOR_DARKGRAY);
      BSP_LCD_DisplayStringAtLine(1,(uint8_t*)"TEST LINE 1");
      BSP_LCD_DisplayStringAtLine(2,(uint8_t*)"TEST LINE 2");
      BSP_LCD_DisplayStringAtLine(3,(uint8_t*)"TEST LINE 3");
      BSP_LCD_DisplayStringAtLine(4,(uint8_t*)"TEST LINE 4");
      BSP_LCD_DisplayStringAtLine(5,(uint8_t*)"TEST LINE 5");
      HAL_Delay(1000);
      BSP_LCD_Clear(LCD_COLOR_WHITE);
      HAL_Delay(1000);
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
 
  }
  /* USER CODE END 3 */
 
}
 
cs




반응형
Comments