STM32CubeIDE를 이용하여 테스트 했던 TFT LCD제어 에서 STM32G431의 플래시 메모리는 128kB 밖에 되지 않기 때문에 내부 메모리로 BMP 파일 출력하기 어렵다. SD Card를 이용하여 BMP 파일을 출력 하기 위해 Arduino 라이브러리를 사용하면 좋을것 같다.
SM-Type EVM을 이용하여 8bit 방식으로 TFT LCD를 제어 할수 있는 NET-EXP 보드를 이용하여 테스트 하였다.
Arduino 라이브러리는 https://github.com/adafruit/TFTLCD-Library 를 참고 수정해서 사용 했다
기본 라이브러리를 이용하여 초기화 부분을 수정해서 테스트 해보면 정상 동작 하는것을 확인 할 수 있다.
#define TFT_RD LL_GPIO_PIN_0 // Px0
#define TFT_WR LL_GPIO_PIN_6 // Px1
#define TFT_RS LL_GPIO_PIN_9 // Px5
#define TFT_CS LL_GPIO_PIN_8 // Px6
#define TFT_RST LL_GPIO_PIN_7 // Px7
#define PORTB (GPIOB->ODR)
#define LCD_EN_BIT TFT_CS
#define LCD_EN_PORT GPIOB
#define LCD_RS_BIT TFT_RS
#define LCD_RS_PORT GPIOB
#define LCD_WR_BIT TFT_WR
#define LCD_WR_PORT GPIOC
#define LCD_LAT_BIT BIT8
#define LCD_LAT_PORT GPIOA
#define LCD_LAT_ON() sbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_LAT_OFF() cbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_DATA_LATCH() LCD_LAT_ON();LCD_LAT_OFF();
#define _LCD_DAT_OUT(Data) PORTB = (PORTB&0xFF00) | (Data>>8);\
LCD_DATA_LATCH();\
PORTB = (PORTB&0xFF00) | (Data&0xFF);
#define Delay(x) delay(x)
#define RD_ACTIVE
#define RD_IDLE
#define WR_ACTIVE HAL_GPIO_WritePin(LCD_WR_PORT, LCD_WR_BIT, GPIO_PIN_RESET)
#define WR_IDLE HAL_GPIO_WritePin(LCD_WR_PORT, LCD_WR_BIT, GPIO_PIN_SET)
#define CD_COMMAND cbi(LCD_RS_PORT, TFT_RS)
#define CD_DATA sbi(LCD_RS_PORT, TFT_RS)
#define CS_ACTIVE cbi(LCD_EN_PORT, TFT_CS)
#define CS_IDLE sbi(LCD_EN_PORT, TFT_CS)
#define RST_ACTIVE
#define RST_IDLE
#define RD_STROBE {RD_ACTIVE; RD_IDLE;} // Not use
#define WR_STROBE {WR_ACTIVE; WR_IDLE;} // Not use
void STM32_TFT_8bit::writeCmdWord(uint16_t c) {
CS_ACTIVE;
CD_COMMAND;
_LCD_DAT_OUT(c);
WR_ACTIVE;
WR_IDLE;
CD_DATA;
}
void STM32_TFT_8bit::writeDataWord(uint16_t c) {
_LCD_DAT_OUT(c);
WR_ACTIVE;
WR_IDLE;
}
반응형