본문 바로가기

공부/STM32F4

16. [STM32F429] LCD + 터치 스크린 사용 방법

반응형

 

stm32f429 는 터치 스크린이 포함되어 있습니다.

스텝 으로 나눠서 차근차근 사용해보겠습니다.

도움이 되셨다면 댓글좀..달아주세요 ㅠㅠ 너므 외로워...😢😢😢😢

 

step1

여기 까지가 LCD 설정 입니다.

LTDC 로 핀설정 하고 SPI5로 LCD와 통신을 하게 됩니다.

 

I2C3는 터치 스크린 i2c 통신입니다.

 

USART1는 모니터링을 위해 추가하겠습니다.

 

크럭설정입니다.

 

구 버전 사용시

더보기

Project Manager 에서 버전을 1.23 으로 바꿔주세요.

 

신 버전 사용시

 

새로운 버전으로 하면 arm7 버그가 나더라구요.

https://hnydiy.tistory.com/217

 

mpu_arm7.h 에서 에러

펌 버전 업데이트 되면서 MX 에서 자동생성 하면 iar7 에서 mpu_arm7에서 에러가 나요 ㅠㅠ 그러면 아래처럼 수정해주세요 아니면 다운그레이 버전으로 사용하시면 될듯... #ifndef __RESTRICT #if __ICCARM_V8

hnydiy.tistory.com

 

step2

구 버전 사용 시

더보기

바로 생성 했을 때 입니다.

 

위에 EXTI 주석 처리와 exti.c를 삭제해주세요.

 

 

 

 

BSP.zip
0.10MB

 

이 파일을 

이렇게 오픈 폴더 열어서 Drivers 안에다가 넣습니다.

 

요로케 BSP 그룹을 만들어서 .c를 넣어주세요.

 

프로젝트 설정에서 폴더 위치를 추가해주세요.

 

step3

main.h 에

#include "stm32f429i_discovery_lcd.h"
#include "stm32f429i_discovery_ts.h"

#include <stdio.h>

추가해주세요

 

int fputc(int ch, FILE *f) 
{ 
    uint8_t temp[1]={ch}; 
    HAL_UART_Transmit(&huart1, temp, 1, 2); 
  return(ch); 
} 

uint16_t frame_buffer[76800];

이 코드를 추가해주세요.

 

int main(void)
{
  /* USER CODE BEGIN 1 */
  TS_StateTypeDef  TS_State;
  
  static uint32_t x = 0, y = 0;
  uint8_t buffer_str[50]={0,}; 
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA2D_Init();
  MX_I2C3_Init();
  MX_LTDC_Init();
  MX_SPI5_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  printf("test\r\n");

  BSP_LCD_Init();
  BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER, (uint32_t)frame_buffer);
  BSP_LCD_SelectLayer(LCD_BACKGROUND_LAYER);
  BSP_LCD_DisplayOn();
  BSP_LCD_Clear(LCD_COLOR_WHITE);

  BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
  
  
  BSP_LCD_SetBackColor(RGB_LCD_COLOR_WHITE);
  BSP_LCD_SetTextColor(RGB_LCD_COLOR_BLACK);  
  BSP_LCD_SetFont(&LCD_20_FONT);
  BSP_LCD_DisplayStringAt(0,150, (uint8_t*)"TEST1", CENTER_MODE);  
  BSP_LCD_SetFont(&LCD_16_FONT);
  BSP_LCD_DisplayStringAt(0,180, (uint8_t*)"TEST2", CENTER_MODE); 
  BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    BSP_TS_GetState(&TS_State); 
    if ((TS_State.TouchDetected)){
      x = TS_State.X;
      y = TS_State.Y;
      sprintf(buffer_str, "X=%d   ",x);
      BSP_LCD_DisplayStringAt(0,50, (uint8_t*)buffer_str, LEFT_MODE); 
      memset(buffer_str,0,50);
      
      sprintf(buffer_str, "Y=%d   ",y);
      BSP_LCD_DisplayStringAt(0,100, (uint8_t*)buffer_str, LEFT_MODE); 
      memset(buffer_str,0,50);
      
    }
    /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */
}

 

결과

 

 

반응형