목록2025/07 (38)
지노랩 /JinoLab
단일 입력·단일 출력 신경망 구조flowchart LR Input[입력값 x] --> Mult[× 가중치 w] Mult --> Pred[예측값 y_pred]입력(Input, x): 예측에 사용할 관측치(예: 그날의 온도)가중치(Weight, w): 입력값의 중요도를 나타내는 파라미터예측값(Predicted Value, y_pred): 입력×가중치 연산 결과로 도출되는 값감정 분류 예시: 온도 → 행복/슬픔문제 정의주어진 온도 x로부터 “행복” 또는 “슬픔” 상태를 예측숫자 스케일링y_pred > 10이면 행복(happy)y_pred ≤ 10이면 슬픔(sad)추후 학습할 내용단어(감정 상태) → 숫자 값으로 인코딩하는 방법은 뒤쪽 강의에서 다룹니다.순전파 의사코드(Pseudocode)# 입력 x..
인공지능(Artificial Intelligence, AI)은 “기계가 학습하고 추론하여 인간과 유사한 지능적 행동을 보이게 하는 기술”을 총칭합니다. 그리고 머신러닝(Machine Learning, ML)은 AI의 한 분야로, 데이터로부터 스스로 학습하는 알고리즘을 연구·개발하는 영역입니다. 이 가운데 **딥러닝(Deep Learning, DL)**은 “다층 인공신경망(Artificial Neural Networks)을 활용하여 복잡한 데이터의 특징을 자동으로 추출하고 학습하는 머신러닝 기법”을 가리킵니다.flowchart LR AI[Artificial Intelligence] ML[Machine Learning] DL[Deep Learning] AI --> ML --> DL위 그..
STM32 LTDC(LCD-TFT Display Controller)는 두 개의 레이어(Layer 1, Layer 2)를 지원하여, 서로 다른 이미지를 겹쳐서 표현할 수 있는 강력한 기능을 제공합니다. 이번 글에서는 레이어 개념부터 핵심 레지스터 설정, 알파 블렌딩, 윈도잉(windowing), 그리고 그림자 레지스터(shadow register)까지 임베디드 엔지니어 눈높이에 맞춰 차근차근 살펴보겠습니다.1. 레이어란 무엇인가?레이어 = 독립된 프레임버퍼각 레이어는 메모리(RAM)에 자신만의 픽셀 데이터를 보관합니다.동시 표시배경(Background) 위에 레이어 1을 그린 뒤, 그 위에 레이어 2를 덮습니다.순서는 배경 → Layer 1 → Layer 2로 고정됩니다.그림: 배경(흰색) 위에 파랑 레..
지난 강의에서 LTDC 클록과 동기 타이밍, 배경색(Register BCCR) 설정 코드를 작성했습니다. 이번 글에서는 실제 하드웨어에서 빨강 배경이 정상 출력되는지 확인하고, 동기 타이밍 보정을 통해 화면 전체가 채워지도록 수정한 뒤, 파랑 배경으로 색을 바꿔보는 과정을 단계별로 다룹니다.1. 준비된 LTDC 초기화 코드void LTDC_Init(void) { // 1) LTDC 클록 활성화 (APB2ENR) REG_SET_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN); // 2) HSYNC/포치/Active Width 설정 LTDC->SSCR = ((BSP_LCD_HSW-1) BPCR = ((BSP_LCD_HSW + BSP_LCD_HBP - 1) AWCR..
이번 글에서는 STM32F4/F7 시리즈에서 제공하는 LTDC(LCD-TFT Display Controller) 주변장치를 직접 설정해, 백그라운드에 빨간색(Red) 화면을 출력하는 과정을 단계별로 다룹니다. LTDC 인터페이스를 막 접하는 개발자라도 이해하기 쉽도록, 각 레지스터의 역할과 설정 방법을 자세히 설명합니다.1. LTDC 주변장치 클록 활성화LTDC 레지스터는 APB2 버스 도메인에 속해 있으므로, 먼저 RCC의 APB2ENR 레지스터에서 LTDC 클록을 켭니다.// 1) RCC APB2 버스에서 LTDC 클록 활성화REG_SET_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN);RCC_APB2ENR_LTDCEN 비트를 1로 세팅하면, 이후 LTDC 레지스터 접근과 동작이 ..
임베디드 시스템에서 LTDC(LCD-TFT Display Controller)를 활용해 병렬 RGB 디스플레이를 구동하려면, MCU의 GPIO 핀을 정확히 설정해야 합니다. 이번 포스팅에서는 STM32F4/F7 시리즈를 예시로, LTDC용 GPIO 핀을 매크로로 정의하고, 배열을 이용해 일괄 초기화하는 방법을 단계별로 정리합니다.1. BSP 헤더에 핀 매크로 정의하기 (bsp_lcd.h)디스플레이 회로도에서 LTDC 신호가 연결된 MCU 핀과 포트를 확인아래처럼 각 신호를 #define으로 매핑// 컬러 데이터(Red 채널 예시)#define LCD_DATA_R2_PIN GPIO_PIN_10#define LCD_DATA_R2_PORT GPIOC#define LCD_DATA_R3_PIN GPIO_..
STM32F4/F7 시리즈에서 LTDC(LCD-TFT Display Controller)는 병렬 RGB 디스플레이를 부드럽고 효율적으로 구동하기 위해 제공되는 핵심 주변장치입니다. 이 글에서는 LTDC를 처음 접하는 임베디드 엔지니어도 쉽게 따라올 수 있도록 핵심 개념과 설정 흐름을 3단계로 깔끔히 정리합니다.1. 왜 LTDC를 사용하나?CPU 개입 최소화DMA 수준으로 메모리(프레임 버퍼)→패널 전송을 처리병렬 RGB 지원최대 24비트(8R+8G+8B) 색상 데이터 + VSYNC/HSYNC/DE/PCLK 자동 생성다중 레이어배경+전경 레이어를 알파 블렌딩으로 합성 가능백라이트·전원 제어LTDC 출력 타이밍에 맞춘 백라이트 제어 신호 지원2. LTDC 설정 3단계핀 매핑 (Pin Initializatio..
이번 글에서는 지난 강의에서 완성한 SPI 핀 · 주변장치 초기화 코드를 실제 하드웨어에서 테스트하고, 로직 분석기로 신호를 캡처·디버깅하는 과정을 살펴봅니다. 특히, BIDIOE, BSY 플래그 처리 등 놓치기 쉬운 포인트를 정리합니다.1. SPI 주변장치 활성화 누락 점검SPI 레지스터 SPE 비트를 세팅해야 실제로 SCK/SDA 신호가 출력됩니다.void LCD_SPI_Enable(void) { // CR1 레지스터에서 SPE 비트(0x40)를 1로 설정 REG_SET_BIT(SPI5->CR1, SPI_CR1_SPE);}Tip: SPI 초기화 후 반드시 LCD_SPI_Enable()을 호출해야 합니다.2. BIDIOE: 반이중 전송 방향 지정반이중(1선) 모드에서 전송을 시작할 때는 BI..
임베디드 시스템에서 ILI9341 같은 LCD 드라이버 칩을 다룰 때, RESX, CSX, D/CX 세 가지 제어 신호의 역할을 정확히 이해해야 안정적으로 화면을 초기화하고 명령을 전송할 수 있습니다. 이번 글에서는각 신호의 의미하드웨어 상태 관리 방법코드 예시를 차례대로 살펴보고, 다음 강의에서 로직 분석기로 실제 SPI 트래픽을 검증하는 방법을 예고합니다.1. RESX (Reset) – 칩 리셋 신호기능:ILI9341 내부 레지스터와 상태를 공장 초기화 상태로 되돌립니다.LOW → HIGH 펄스를 최소 50 ms 이상 주어야 칩이 올바르게 리셋됨.동작 원리:Idle: RESX = HIGH → 칩은 정상 동작 모드Reset 시작: RESX를 LOW (칩 비활성)Reset 완료: 일정 시간 후 RESX를..
이번 글에서는 STM32F429 Discovery Kit와 STM32F407 Discovery Kit + 외부 ILI9341 LCD 조합을 모두 아우르는 bsp_lcd 코드를 구성하는 방법을 정리합니다. 자동 생성 코드를 쓰지 않고, 수작업으로 작성한 BSP(Board Support Package) 레이어를 어떻게 활용하고, 보드별 차이점을 어떻게 매끄럽게 처리할지 단계별로 살펴보겠습니다.1. BSP 폴더 구조 준비리포지토리의 bsp/ 폴더 안에lcd/ (ILI9341 제어)lvgl/ (LVGL 그래픽 라이브러리)tsc/ (터치스크린 컨트롤러)이번 실습에서는 lcd/만 사용하므로lvgl/와 tsc/ 소스는 프로젝트 설정에서 Build 제외 처리my_project/│├─ Inc/│ └─ bsp_lcd...
이번 글에서는 STM32F429 Discovery Kit를 예로 들어, ILI9341 LCD 드라이버와 통신하기 위한 SPI5 주변장치를 완벽하게 설정하는 과정을 단계별로 설명합니다. 특히, GPIO 핀을 Alternate Function 모드로 전환하고, 올바른 AF 번호, 출력 유형, 속도, 풀업·풀다운을 지정하는 방법을 다룹니다.1. 필요한 핀 정리신호 용도 보드상의 핀SCLSPI5 클록 (SCK)PF7 (AF5)SDASPI5 데이터 (MOSI / MISO, 반이중)PF9 (AF5)CS칩 선택 (Chip Select)PB6DC데이터/커맨드 구분 (D/C#)PB7RESETLCD 리셋PB0PF7과 PF9는 Alternate Function 5 (AF5) 로 설정해야 SPI5 기능을 사용할 수 있습니다...
이번 포스팅에서는 STM32F429 Discovery Kit(혹은 유사 보드)에서 ILI9341 LCD 드라이버 칩을 제어하기 위한 BSP(Board Support Package) 레이어를 직접 구현해 봅니다.자동 생성 코드를 쓰지 않고, 수작업으로 GPIO·SPI 초기화 코드를 작성하며 주변장치의 내부 동작을 이해하는 것이 목표입니다.1. BSP 파일 생성 및 기본 구조Src 폴더에 bsp_lcd.c 파일 생성Inc 폴더에 bsp_lcd.h 파일 생성bsp_lcd.h 에 다음 프로토타입 선언#ifndef BSP_LCD_H #define BSP_LCD_H void BSP_LCD_Init(void); #endif // BSP_LCD_Hmain.c 에서#include "bsp_lcd.h" int main(v..
다음 단계에서는 ILI9341 LCD 드라이버 칩과 통신하기 위해 필요한 SPI(Serial Peripheral Interface) 주변장치를 설정합니다. STM32F429 Discovery Kit 기준으로 설명하며, 다른 보드에서도 유사한 절차로 적용할 수 있습니다.1. ILI9341 프로그래밍 인터페이스 개요ILI9341 모듈에는 크게 두 가지 인터페이스가 있습니다:프로그래밍 인터페이스LCD 드라이버 초기화용 명령(Command) 전송SPI 반이중(Half-Duplex) 모드로 연결STM32F429 보드: SPI5, 단일 SDA 선 사용데이터 인터페이스픽셀 데이터(RGB)를 전송LTDC 또는 SPI 풀-듀플렉스(Full-Duplex) 모드 사용이 글에서는 ①번, 즉 프로그래밍 인터페이스 설정 방법에 ..
이번 연재의 첫 번째 실습에서는 STM32F429 Discovery Kit를 대상으로, 그래픽 라이브러리나 자동 코드 생성 없이 모두 수작업으로 프로젝트를 준비합니다.이 과정을 통해STM32CubeIDE에서 빈 프로젝트를 만들고필수 설정(FPU, 클록, 주변장치 등)을 이해하며앞으로 LTDC나 SPI 전송 예제를 디버깅할 수 있는 기반을 다져 보겠습니다.1. 왜 ‘수작업’으로 작성하나?핵심 개념 습득자동 생성 코드 뒤에 숨겨진 레지스터 설정, 핀 매핑, 클록 구조 등을 직접 다뤄 봅니다.디버깅 능력 향상초기화가 잘못됐을 때 어디서 에러가 나는지 감이 빨리 옵니다.적용 범위 확대STM32CubeMX가 지원하지 않는 보드나 독자 하드웨어에도 같은 원리를 적용할 수 있습니다.2. 실습 목표VIBGYOR(빨강→..
임베디드 그래픽 개발에서 LTDC나 RGB 인터페이스 기반 디스플레이를 다룰 때, Vsync, Hsync, DE, PCLK(DOTCLK) 그리고 RGB 데이터 라인의 타이밍을 정확히 이해하는 것은 매우 중요합니다. 각 신호의 의미와 타이밍 파라미터를 자세히 살펴보겠습니다.1. DPI 제어 신호 개요Vsync(Vertical Sync): 새 프레임 시작 신호Hsync(Horizontal Sync): 새 스캔라인 시작 신호DE(Data Enable): 유효 픽셀 데이터 구간 표시PCLK(Pixel Clock/DOTCLK): 픽셀 읽기 타이밍 기준RGB 데이터 라인: 실제 R·G·B 색상 정보 전송이 다섯 가지 신호가 적절한 타이밍 관계를 유지하며 화면을 갱신합니다.2. 트레이스 캡처 환경보드: STM32F4..
임베디드 시스템에서 LCD-TFT Display Controller (LTDC) 를 사용해 화면을 갱신할 때, Host(MCU)와 디스플레이 모듈 사이에는 여러 제어·동기 신호가 오갑니다. 이 신호들의 의미와 역할을 명확히 이해해야 올바른 타이밍으로 프레임을 그릴 수 있습니다. 이번 글에서는 Vsync, Hsync, Data Enable, PCLK(DOTCLK), RGB 데이터 라인을 쉽지만 전문적으로 살펴보겠습니다.1. Vsync (Vertical Synchronization)역할: “새 프레임의 시작”을 표시어떻게 동작하나?LTDC가 한 프레임(예: 480×270픽셀) 전체를 전송한 뒤, 다음 프레임을 보낼 준비가 되면 Vsync를 assert(Active Low)디스플레이 모듈은 Vsync를 감지하..
임베디드 그래픽 시스템에서 **HOST(MCU)**와 디스플레이 모듈이 서로 통신하는 방법, 즉 Display 인터페이스에는 여러 표준이 존재합니다. 이번 글에서는 모바일·임베디드 기기에서 널리 쓰이는 MIPI 연합(MIPI Alliance) 규격 중 세 가지 주요 인터페이스 유형을 살펴보고, 이 중 우리가 실제로 사용할 MIPI DPI(RGB 인터페이스)와 MIPI DBI(MCU 인터페이스)를 중심으로 설명합니다.1. MIPI Alliance란?MIPI (Mobile Industry Processor Interface Alliance)모바일 프로세서·카메라·디스플레이 등 각종 기기 간 표준화된 하드웨어·소프트웨어 인터페이스 사양을 제정제조사들끼리 호환성을 보장할 수 있도록 가이드라인 제공Display ..
임베디드 그래픽 애플리케이션에서, **C-배열(C-array)**로 준비된 비트맵 데이터를 실제 화면에 그려 주는 핵심 메커니즘은 크게 두 가지입니다.STM32 계열 칩 중 일부 보드는 LTDC(LCD-TFT Display Controller) 주변장치를 활용하고, 그 외 보드는 SPI(Serial Peripheral Interface) 혹은 유사 직렬 인터페이스를 사용합니다.이번 포스팅에서는 두 방식을 전문 엔지니어 눈높이에 맞춰 차근차근 비교·정리해 드립니다.1. LTDC 기반 전송 방법1.1 LTDC가 하는 일버스 마스터 역할프레임 버퍼(C-배열)에서 원하는 주소를 직접 읽어24비트 RGB 병렬 인터페이스와 함께 VSYNC/HSYNC/DE/CLK 같은 동기 신호를 디스플레이 모듈로 스트리밍CPU 개..
이번 글에서는 비트맵(BMP) 이미지를 MCU 내부 플래시에 C 배열로 넣어 사용하는 과정을 초보자도 쉽게 이해할 수 있도록 차근차근 설명합니다.1. 이미지 메모리 사용량 계산하기해상도(Resolution)가로 픽셀 수 × 세로 픽셀 수예: 480×270 픽셀픽셀 포맷(Pixel Format)의 비트 깊이(bit depth)ARGB8888 : 픽셀당 32비트(4바이트)RGB888 : 24비트(3바이트)RGB565 : 16비트(2바이트) 등메모리 사용량 공식예를 들어 ARGB8888 포맷의 480×270 이미지는480 × 270 × (32 ÷ 8) = 480 × 270 × 4 = 518,400 바이트 ≈ 506 KB메모리(바이트) = 가로 × 세로 × (비트 깊이 ÷ 8)2. BMP(Bitmap) vs J..
스마트폰이나 모니터를 고를 때 한 번쯤 본 적 있는 PPI와 해상도.막상 뜻을 물으면 헷갈리기 쉽지만, 알고 나면 디스플레이 선택과 그래픽 작업에 큰 도움이 됩니다.오늘은 초보자도 알기 쉬운 예시와 함께 차근차근 설명해 드릴게요.1. 픽셀 밀도(PPI)란?PPI(Pixels Per Inch): 인치당 몇 개의 픽셀(pixel)이 들어있는지를 나타내는 단위숫자가 클수록 같은 크기 화면에 더 많은 픽셀이 모여 있다는 의미왜 중요할까?선명도 향상PPI가 높으면 글자나 이미지의 가장자리가 매끄럽고, 거리가 가까워도 픽셀이 보이지 않습니다.고해상도 이미지 표현같은 크기 화면에 더 많은 정보를 담아도 깨지지 않고, 세밀한 디테일을 표현할 수 있어요.PPI 계산 방법가로 픽셀 수와 세로 픽셀 수를 알고 있다고 가정대..