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 관련 회로도

Backlight driver & PFC of LCD panel

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 테스트