Giter Club home page Giter Club logo

stm32f103vet6-tft-lcd-with-resistive-touch-screen's Introduction

LCD Led On Off Test LCD Drawing Test LCD Rotation Test

일부 테스트 과정 영상입니다.
본 프로젝트는 해당 프로젝트를 참고하였으며 이를 STM32F103VET6 MCU에 포팅하였습니다.

22/04/15 : 추가적으로 SD 카드를 사용하여 BMP, JPEG 파일 출력과 한글 폰트 구현 등을 고려하고 있습니다.
22/04/18 : SPI 통신을 DMA 방식으로 수정하여 테스트를 시도해볼 수 있습니다.
22/04/22 : lvgl 라이브러리를 포팅하여 새로운 코드를 작성해볼 수 있습니다.


개발 환경

IDE

  • STM32CubeIDE 1.6.0
  • STM32CubeMX

개발 보드

  • STM32F103VET6 Custom Development Board
    • 📌 이미지 링크 및 구매처

    • 📌 개발보드 회로도

      • 제공되는 개발보드 회로도를 확인해 본 결과, 회로도에 표기되어있는 커넥터 및 핀 헤더명이 실제 보드의 커넥터 및 핀 헤더명과 서로 다른 것을 확인하였습니다. 이를 주의하시고 회로도를 보시길 바랍니다.

      • 사용된 개발보드에서는 FSMC 인터페이스와 FSMC용 TFT LCD 모듈을 쉽게 연결하여 사용할 수 있게 핀을 매핑하여 16X2 헤더로 따로 빼놓았습니다. 아래 그림을 참고하시길 바랍니다.

           


320*240 TFT LCD 모듈

  • 3.2inch 16BIT Module ILI9341 SKU-MRB3205
    • 📌 이미지 링크 및 구매처

    • 📌 해당 TFT LCD관련 자료 종합

      • 해당 LCD 위키 사이트로 가는 링크입니다. 링크를 접속하시면 해당 TFT LCD모듈에 대한 간단한 Overview 부터 User Manual. ILI9341 driver IC 데이터 시트, XPT2406 touch IC 데이터 시트 그리고 예제 등 까지 확인해보실 수 있습니다.
    • 사용한 TFT LCD 모듈의 간단한 스펙 설명은 다음과 같습니다. (자세한 스펙은 데이터시트를 참고하시길 바랍니다.)

      • 들어가기 앞서 FSMC는 FMC라고도 불리며 Flexible Static Memory Controller를 의미합니다. FSMC는 NOR/SRAM, NAND/PC CARD 같은 외부 메모리 칩들을 병렬 인터페이스하여 컨트롤 하는 페리페럴입니다. 참고로 LCD의 직렬 인터페이스 방식에서는 SPI가 많이 쓰이며, 병렬 인터페이스 방식에서는 FSMC가 많이 쓰입니다. 병렬 인터페이스가 직렬 인터페이스보다는 고속이게 됩니다.

      • STM32F10X FSMC에 상세한 내용은 아래 문서명을 참고하세요

        • TFT LCD interfacing with the high-density STM32F10xxx FSMC
        • RM0008 Reference Manual 507p~565p
        • FSMC 인터페이스는 적용되는 외부 메모리에 따라 파라미터나 확장 기능이 추가 될 수 있습니다. 본 프로젝트에서는 FSMC 인터페이스를 TFT LCD에 적용하므로 TFT LCD interfacing with the high-density STM32F10xxx FSMC 어플리케이션 노트를 통해 STM32F10XX MCU의 FSMC 인터페이스를 이용한 TFT LCD제어 방식의 흐름을 전반적으로 이해하실 수 있습니다.
      • TFT LCD모듈의 레귤레이터로 인해 VDD Pin에 3.3V 뿐만 아니라 5V로 전원공급이 가능합니다.

      • 해당 TFT LCD모듈은 8-bit/16-bit 데이터 버스의 인텔 808 (I80) 인터페이스를 지원하며 이를 통해 MCU의 FSMC 인터페이스로 ILI9341 driver IC (LCD 드라이버)를 병렬 제어할 수 있습니다. 기본적으로 16-bit 데이터 버스 이며 아래 그림과 같이 R8, R16 저항을 통해 8-bit로 FSMC 인터페이스 시킬 수 있습니다.


      • 해당 TFT LCD모듈은 감압식 터치 패널이며 이는 누른 좌표점을 얻어내어 터치를 제어하는 형식입니다. (보통 정전식을 더 많이 사용합니다.) 이를 위해 SPI 인터페이스의 XPT2406 touh IC를 이용하여 터치스크린을 제어합니다.

      • 또한 TFT LCD모듈에는 SDCS (SD카드 선택제어핀)이 있으므로 SD카드의 프로토콜 방식인 SDIO/SPI 중 SPI를 이용해 XPT2406에 SPI 슬레이브를 하나더 추가하여 SD카드를 사용한 비트맵, JPEG 출력 등을 시도해 볼 수 있습니다. 본 프로젝트에서는 SD카드 관련 제어를 구현하지 않았습니다.
    • 해당 TFT LCD 모듈의 User Manual을 통해 Pin Description를 이해하기 전에 FSMC 인터페이스에 대한 학습이 필요합니다.


TFT LCD 모듈과 STM32F103VET6 하드웨어 연결

  • 해당 초록색 박스 부분은 LCD의 인텔 808 인터페이스와 MCU의 FSMC 인터페이스 부분입니다. 이를 통해 ILI9341 Driver IC를 제어합니다.

    • FSMC [D0:D15] = FSMC 16bit 데이터 버스
    • FSMC NEx = FSMC Chip Select (LCD의 CS Pin과 연결)
    • FSMC NOE = FSMC Output Enable (LCD의 RD Pin과 연결)
    • FSMC NWE = FSMC Write Enable (LCD의 WR Pin과 연결)
    • FSMC Ax = LCD Register와 LCD Data를 선택하기 위한 Address line (0~25) (LCD의 RS Pin과 연결) High일때 레지스터 / Low일때 데이터
  • NEx, NOE, NWE 앞에 붙은 N은 Active Low를 의미합니다.

  • 본 프로젝트에서는 STM32F103VET6의 FSMC 컨트롤러의 NE1에 A16을 사용합니다. 즉, FSMC bank1 NOR/PSRAM 1을 사용하며, 서브 뱅크에 따라 주소 매핑은 아래와과 같습니다.

  • 참고로 뱅크1은 서브뱅크4개로 나눠지며 이와 관련된 자세한 사항은 RM0008 Reference Manual 511p 부터 참고하세요.

#define LCD_BASE0        		((uint32_t)0x60000000) //ILI9341_CMD_ADDR
#define LCD_BASE1        		((uint32_t)0x60020000) //ILI9341_DATA_ADDR
  • RST Pin은 STM32F103VET의 NRST Pin에 연결되며 개발 보드 회로도를 참고하시면 HW적으로 리셋 스위치에 달려있습니다. 따라서 SW적으로 따로 리셋을 구현하지 않았습니다.

  • 해당 주황색 박스 부분은 SPI 인터페이스 부분입니다. SPI2를 사용하며, 이를 통해 XPT2406 touh IC를 제어합니다.

    • PEN Pin은 터치 스크린의 인터럽트를 감지하며, 터치가 발생했을 때 Low로 떨어집니다.
  • 해당 노란색 색칠 부분은 SD 카드를 선택하여 제어하는 핀입니다.

    • 즉, SPI CS Pin 으로 사용 가능합니다. 만약 SD카드를 이용하여 확장 기능을 추가하고 싶다면 이 핀을 SPI2 CS 기능을 하는 핀으로 GPIO 셋팅을 하여 XPT2406과 같은 SPI 버스 라인에 슬레이브를 추가시키세요.
    • SD_CS Pin이 Low가 되면 SD카드가 선택됩니다.
    • 본 프로젝트에서는 SD카드를 이용하지 않습니다.
  • BL Pin은 LCD의 백라이트 핀으로 상태가 set이 되어야 켜집니다. 추가적으로 PWM을 지원하는 핀을 이용하여 BL핀을 연결한다면 백라이트의 밝기를 조절할 수 있습니다.

  • Dev Board Pin Name은 사용된 개발 보드 실크 스크린 레이어에 표기되어있는 핀 명을 의미합니다.


크게 보기



STM32CubeMX 설정

Clock Configuration

📌




Pinout

📌





Peripheral & Core Configuration

1. FSMC

📌


2. SPI2

📌


3. GPIO

📌
• PC6 (LED2), PC7 (LED1)은 개발 보드 내에 연결된 2개의 LED Pin을 의미합니다.



5. NVIC

📌




테스트 파일

구성 및 경로

  • 기본적으로 구현한 테스트 함수는 다음과 같습니다

    • stm32f103vet6_fsmc_lcd_test → src → ap → ap.c → void apBoardLedTest(void){...}
    • stm32f103vet6_fsmc_lcd_test → src → ap → ap.c → void apLcdDemoTest(void){...}
    • stm32f103vet6_fsmc_lcd_test → src → ap → ap.c → void apLcdTouchMenuTest(void){...}
    • stm32f103vet6_fsmc_lcd_test → src → ap → ap.c → void apLcdTouchBoardLedTest(void){...}
  • ap.c 함수에서 제공하는 테스트 외에 다양한 테스트 케이스를 구현하고자 하시면 ili9341_lcd.c/.hxpt2046_touch.c/.h의 함수를 참고하여 응용하세요.

  • 응용한 예제는 lcd_demo.c/.h를 참고하세요.


실행 방법

  • 기본 테스트 함수를 빌드하고 실행시키기 위해서는 stm32f103vet6_fsmc_lcd_test → src → common → def.h에서 (1). #define TEST_SELECT의 주석을 해제 또는 설정하여 테스트 함수 범위를 결정하고, (2). 활성화된 범위 내에 빌드 시킬 테스트 함수의 주석을 해제해야합니다.

//TODO: 테스트 함수 선택 (5)

/*
 *  @ 테스트 할 함수 범위 결정
 * - #define TEST_SELECT 주석 해제 시 menu를 사용하지 않는 테스트 함수 활성
 * - #define TEST_SELECT 주석 설정 시 menu를 사용하는 테스트 함수 활성
 *
 */
#define TEST_SELECT

#ifdef  TEST_SELECT
/* 활성화 되었다면 테스트할 함수의 주석을 해제하세요 */

#define BOARD_LED_TEST
//#define LCD_DEMO_TEST
//#define LCD_TOUCH_ROTATION_TEST

#endif /* TEST_SELECT */


#ifndef TEST_SELECT
/* 활성화 되었다면 테스트할 함수의 주석을 해제하세요 */

//#define LCD_TOUCH_MENU_TEST
//#define LCD_TOUCH_BOARD_LED_TEST

#endif /* TEST_SELECT */

참고

프로젝트를 빌드할 때는 다음 경로에 있는 폴더를 빌드 및 디버그 항목에서 제외해야 정상적으로 프로젝트가 빌드됩니다.

  • stm32f411ceu6_fw_module → src → lib → Core

How to exclude

📌
• Core 폴더를 클릭하고 다음 단계를 진행합니다.

   



• 최종적으로 아래와 같은 폴더 상태가 됩니다.





출처

개발 보드 이미지 출처 : https://coyoteugly.tistory.com/108

stm32f103vet6-tft-lcd-with-resistive-touch-screen's People

Contributors

taejin-seong avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

ayuyaj

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.