32F429IDISCOVERY BSP로 터치스크린 제어

2019. 7. 5. 15:04임베디드/32F429IDISCOVERY

전에 I2C 방식으로 동작하는 터치스크린 드라이버인 STMPE811를 제어해서 CHIP ID를 얻는 실습을 진행했다

이번에는 실제 터치스크린 동작을 제어할 것이고, 쉽게 이용하고자 ST에서 제공하는 BSP를 활용할 것이다

 

1. cubeMX에서 사용할 I2C3와 값 확인을 위한 UART를 개방하도록 한다. 그리고 BSP 제어하는 데 있어, ILI쪽이 포함되어 있어 경고문구를 지우기 위해 SPI도 개방을 하도록 할 것이다. 물론 지금 예제에서는 사용되지 않다. 코드가 워낙 길고 복잡하다 보니 함수에 포함되어 있을 뿐이다. 

 

 

 

 

2. 프로젝트 파일을 생성하기 전에 이번 예제는 ST에서 제공하는 Cube 파일을 사용할 것이기 때문에, 위치를 잘 알아두도록 한다. 확인한 이후 프로젝트를 생성하도록 하자 

 

 

3. 우리가 이번 예제에서 할 일은 터치스크린을 눌렀을 때의 x, y 좌표를 불러와서 UART로 송신하는 예제다. 아무래도 ST에서 제공하는 BSP를 사용하기 때문에 결론적으로 어떤 함수를 이용하는지 알아보고, 이를 구성하는 식으로 진행하도록 할 것이다

 

BSP에 있는 파일을 보기 위해 2번에서 확인했던 경로로 들어가보자

 

C:\Users\user\STM32Cube\Repository\STM32Cube_FW_F4_V1.24.1로 들어간 후에

\STM32Cube_FW_F4_V1.24.1\Drivers\BSP\STM32F429I-Discovery로 더 들어가보자

 

 

결론적으로 사용할 함수는 32f429i_discovery_ts.c(touch screen) 파일에 있는 것들이다. 함수를 자세히 살펴보면,

 

1) BSP_TS_Init 함수로 초기화를 진행한 이후,

 

2) BSP_TS_GetState 함수로 상태를 읽어오게 된다. 만일 TouchDetected가 true가 됐을 때 값을 UART로 송신할 것이다

 

4. BSP 폴더를 새로 만들고, Inc 헤더 폴더와 Src 소스 폴더를 분리해서 사용하고자 하는 BSP 파일을 추가하자

 

 

그리고 ts 소스파일과 헤더파일까지 추가하고, 실행하려고 했는데 init 함수를 실행시키자. init 함수에 들어가는 사이즈는 LCD 사이즈를 넣어줘야 하는데, 

http://galaxy.agh.edu.pl/~amrozek/TM/SF_TC240T_9370A_T.pdf 규격서를 참고하면 사이즈를 확인할 수 있다

 

 

main.c에 BSP_TS_Init(240, 320); 라고 작성한 이후에, 폴더를 새로 생성했으니 include path에 넣어주자

 

 

그리고 #include "stm32f429i_discovery_ts.h"을 헤더파일로 추가하고 컴파일을 하면 오류가 뜰 것이다. 이것을 하나하나씩 잡아야 하는데 너무 많기 때문에, 한번 오류 화면에 뜨는 오류들을 한번씩 잡아보고 밑에 결과파일과 사진을 올리도록 할 것이니 참고하면 좋을 것 같다

 

참고로 stmpe811.c stmpe811.h는 \Drivers\BSP\Components\stmpe811 경로 아래에 있다

그리고 io.h와 ts.h는\Drivers\BSP\Components\Common 경로 아래에 있다

 

이렇게 

 

printf 함수를 사용하기 위해 write 함수까지 정의한다

 

int _write(int file, char *ptr, int len)
{
HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, 0xFFFFFFFF);
return len;
}

 

 

다음과 같이 x,y 좌표가 출력됨을 알 수 있다. 코드는 아래에 적혀있다

 

 

전체 프로젝트 깃허브 주소: 

https://github.com/surinoel/stm32/tree/master/32F429IDISCOVERY/cubeMX/I2C_BSP_touchscreen

 

[+추가] 한 번 눌렸을 때의 터치가 여러 번 입력되는 것을 잡지 못해 추후에 인터럽트로 잡을 계획이다