|
MCU
|
STM32F746G DISCOVERY(ST)
|
|
IDE
|
STM32CubeIDE
|
|
목표
|
LCD I/F를 이용하여 TFT LCD 출력
|
- 이전 글과 달리 IDE를 ATOLLIC → CubeIDE로 변경
- ATOLLIC은 CubeMX와 ATOLLIC을 따로 설치해야 하나, CubeIDE = CubeMX + IDE 통합 환경
- 사용상의 큰 다른점은 없으나, ATOLLIC에서 생성한 프로젝트를 CubeIDE에서 바로 사용할 수 없고 Import 해서 사용해야 함
1. LTDC(LCD-TFT Display Controller)
STM32F746G DISCOVERY Board에는 480 x 272 해상도의 4.3인치 터치패널이 있는 TFT-LCD가 달려있다.
Red : Green : Blue = 5 : 6 : 5 = 16bit Color에 480x272 해상도의 한 화면을 그릴때 메모리를 계산해 보면,
- 480 x 272 x 2byte = 261,120byte = 261Kbytes
- STM32F746의 SRAM이 320Kbytes인데, 한 화면을 그리고 나면 메모리가 없다.
그래서 외부 SDRAM을 프레임 버퍼 메모리로 사용해야 하므로, LCD 설정에 앞서 SDRAM을 설정 해야 한다.
2. STM32F746 DISCOVERTY LCD + TOUCH 관련 회로도



MCU

3. LTDC 설정
3-1. RGB565(16 bits)

3-2. Clock Configuration : LCD Clock 9.6MHz로 설정

3-3. LTDC Parameter Settings

3-4. LTDC Layer Settings : Layer 설정

3-5. LTDC GPIO Settings : Data Bus 결선 확인
아래 회로도를 확인하여, LTDC에서 기본으로 지정하는 포트가 아니고 DISCOVERY Board에서 지정하는 포트로 변경해야 한다.



3-6. LCD DSP와 Backlight Pin 설정



4. RNG 설정
- 화면에 색을 랜덤으로 바꾸기 위해 Random Number Generator 를 enable

- GENERATE CODE
5. main.c 수정
- 네모 표시함수를 작성
/* USER CODE BEGIN 0 */
void buf_rect(uint16_t *pBuf, uint32_t start_x, uint32_t stop_x,
uint32_t start_y,uint32_t stop_y,uint16_t color)
{
for(uint32_t j=start_y; j<stop_y; j++)
{
for(uint32_t i=start_x; i<stop_x; i++)
{
*(pBuf + j*480 + i) = (uint16_t)color;
}
}
}
- pBuf 주소를 지정
/* USER CODE BEGIN 1 */
uint16_t *pBuf = (uint16_t *)0xC0000000;
/* USER CODE END 1 */
- SDRAM 초기화 함수와 LTDC 프레임 버퍼 주소 지정
/* USER CODE BEGIN 2 */
BSP_SDRAM_Initialization_sequence(REFRESH_COUNT);
HAL_LTDC_SetAddress(&hltdc, pBuf, 0); // Reconfigure the frame buffer Address
/* USER CODE END 2 */
- random 함수를 발생시키는 함수를 추가하고 여기서 발생한 32bit 정수를 반씩 나누어 색으로 이용하는 함수를 작성
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
uint32_t rng_val = HAL_RNG_GetRandomNumber(&hrng);
printf("RNG_val = 0x%08lx \r\n",rng_val);
buf_rect(pBuf, 0,240,0,136,rng_val & 0xffff); rng_val >>= 16;
buf_rect(pBuf, 240,480,0,136,rng_val & 0xffff);
rng_val = HAL_RNG_GetRandomNumber(&hrng);
printf("RNG_val = 0x%08lx \r\n",rng_val);
buf_rect(pBuf, 0,240,136,272,rng_val & 0xffff); rng_val >>= 16;
buf_rect(pBuf, 240,480,136,272,rng_val & 0xffff);
HAL_Delay(500);
}
/* USER CODE END 3 */

'ST > STM32F746DIS' 카테고리의 다른 글
| STM32F746G DISCOVERY - CAMERA I/F (0) | 2025.04.19 |
|---|---|
| STM32F746G DISCOVERY - LCD + TOUCH (0) | 2025.04.19 |
| STM32F746G DISCOVERY - SDRAM (0) | 2025.04.19 |
| STM32F746G DISCOVERY - TIM(IC, OC, PWM) (0) | 2025.04.19 |
| STM32F746G DISCOVERY - TIMER (0) | 2025.04.19 |