◎ TFT LCD 제어
이번글에서 제어 해보고 하는 LCD는 4.3 인치 TFT LCD 입니다. LCD 드라이브는 RA8875 라는 칩셋이 적용되고 MCU와 연결되어 TFT LCD 동작을 진행 합니다.
STM32F407xx (Cortex-M4) 시리즈 부터는 데이터 시트에 보면 LCD에 병렬 인터페이스(8080/6800 모드)를 기본적으로 지원합니다. 8080과 6800은 주변 장치 간의 병렬 통신 인터페이스 라고 할수 있습니다. 대략 요약을 해보자면
1. 8080 병렬 모드 (Intel 8080 인터페이스)
● 데이터 버스 : 8비트
● 제어 신호
- RD (Read) : 데이터 읽기
- WR (Write) : 데이터 쓰기
- CS (Chip Select) : 장치 선택
● 주소 및 데이터 멀티플렉싱
● 동기식 / 비동기식 통신 지원
2. 6800 병렬 모드 (Motorola 6800 인터페이스)
● 데이터 버스 : 8비트
● 제어 신호 :
- E (Enable) : 데이터 전송 제어
- R/W (Read/Write) : 읽기 / 쓰기 방향 설정
● 상대적으로 더 단순한 제어 방식
● 클록 동기화 메커니즘 차이
※ 병렬 통신 인터페이스들은 특히 LCD 및 그래픽 장치에 많이 적용되고 있습니다.
과거에는 이런 병렬통신 인터페이스들은 직접 GPIO 에서 제어를 했습니다. STM32F407xx 부터는 FSMC( Flexible Static Memory Controller ) 고성능 메모리 컨트롤러를 적용하여 많은 용량에 그래픽 데이터를 전송 하게 할수 있습니다.
현재 구현 하고자 하는 TFT LCD 드라이버 칩셋은 RA8875 입니다.
https://www.raio.com.tw/en/index.html
歡迎光臨瑞佑科技網站 Welcome to RAIO Technology Inc.
RAiO focus on LCD Controller and Driver related products, also specializes in many digital and analog techniques and technologies.
www.raio.com.tw
LCD 구현을 위해서는 우선 구성된 회로도와 RA8875 datasheet 가 필요 합니다.
우선 위 회로도를 참고하여 MCU 와 RA8875에 포트 초기화 부터 진행 해야 합니다.
RA8875에 주요 특징들중 하나는 위에서 언급한것 처럼 8080 병렬 모드로 데이터 버스를 구성 한다는 겁니다. 현재 회로도를 보면 D0~D15 까지 데이터 버스를 구성한것을 확인할수 있습니다. 그리고 나머지 chip select 되는 부분이나 이런 부분들에 대해서도 모두 포트 초기화를 진행 합니다.
위 글은 stm32cubeMX 로 LCD 드라이브에 핀을 구성한 그림입니다. 위에 처럼 진행 하면 자동으로 포트 초기화 코드를 생성해 줍니다.
/*
*********************************************************************************************************
* 함수명: LCD_CtrlLinesConfig
* 기능설명: LCD
* 매개변수: 없음
* 반환값: 없음
*********************************************************************************************************
*/
static void LCD_CtrlLinesConfig(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(TP_INT_GPIO_Port, TP_INT_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LCD_BUSY_GPIO_Port, LCD_BUSY_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : LCD_PWM_Pin */
GPIO_InitStruct.Pin = LCD_PWM_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(LCD_PWM_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO(PORTE) pins : PE7 PE8 PE9 PE10
PE11 PE12 PE13 PE14
PE15 */
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FSMC;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_13
|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1
|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FSMC;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pin : TP_NCS_Pin */
GPIO_InitStruct.Pin = TP_NCS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(TP_NCS_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : TP_INT_Pin */
GPIO_InitStruct.Pin = TP_INT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(TP_INT_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : LCD_BUSY_Pin */
GPIO_InitStruct.Pin = LCD_BUSY_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LCD_BUSY_GPIO_Port, &GPIO_InitStruct);
}
이렇게 해서 포트 초기화 구성은 완료 되었습니다. 다음 글에서는 TFT LCD 제어에 가장 핵심이 되는 RA8875 에 동작 방식과 그것을 어떤 방식으로 구현 하는지 정리해 보겠습니다.
'STM32 (Cortex-M4)' 카테고리의 다른 글
STM32 media 보드 - TFT LCD 제어 PART2 (0) | 2025.03.31 |
---|---|
STM32 media 보드 - delay (0) | 2025.03.27 |
STM32 media 보드 - GPIO 제어 (0) | 2025.03.25 |
STM32 media 보드 - 개발 환경 설정 (0) | 2025.03.24 |
STM32 media 보드 - 글 소개 (0) | 2025.03.24 |