ST/STM32F746DIS
STM32F746G DISCOVERY - LCD + TOUCH
engineer4ever
2025. 4. 19. 11:59
MCU
|
STM32F746G DISCOVERY(ST)
|
IDE
|
STM32CubeIDE
|
목표
|
TOUCH SCREEN 입력을 받아 LCD 화면 전환
|
1. STM32F746 DISCOVERTY LCD + TOUCH 관련 회로도


2. I2C 설정
2-1. I2C3 : I2C

2-2. I2C Parameter Settings : slave address 0x70

2-3. I2C GPIO Settings : PH7(I2C3_SCL), PH8(I2C3_SDA)로 변경

2-4. GPIO Settings : PI13(LCD_INT)로 추가

2-5. NVIC : EXTI enable

- GENERATE CODE
3. main.c 수정
- HAL_GPIO_EXTI_Callback() 작성
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
ts_trigger = 1;
}
- SDRAM 초기화 함수와 LTDC 프레임 버퍼 주소 지정, Touch Screen 초기화
BSP_SDRAM_Initialization(REFRESH_COUNT);
HAL_LTDC_SetAddress(&hltdc, pBuf, 0);
status = BSP_TS_Init(480,272);
if(status == 0) printf("Touch Init OK\r\n");
else printf("Touch Init Error : %d\r\n", status);
- Touch 입력을 받아 화면 색을 바꾸는 함수 작성
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(ts_trigger == 1)
{
ts_trigger = 0;
if(BSP_TS_GetState(&TS_State)==0){
x=TS_State.touchX[0];
y=TS_State.touchY[0];
printf("TS_x = %d , TS_y=%d \r\n",x,y);
uint32_t rng_val = HAL_RNG_GetRandomNumber(&hrng);
if(x < 240)
{
if(y < 136) buf_rect(pBuf, 0,240,0,136,rng_val & 0xffff);
else buf_rect(pBuf, 0,240,136,272,rng_val & 0xffff);
}
else
{
if(y < 136) buf_rect(pBuf, 240,480,0,136,rng_val & 0xffff);
else buf_rect(pBuf, 240,480,136,272,rng_val & 0xffff);
}
}
HAL_Delay(10);
}
}
/* USER CODE END 3 */

STM32F746 LCD + TOUCH 테스트