STM32F429 개발 보드가 도착하여 LVGL 최신 버전인 8.0.2 버전으로 포팅하려고 하며, 아래 LVGL GitHub의 STM32F429 Disc 데모보드에 포팅한 예제를 함께 참고하였다. GitHub - lvgl/lv_port_stm32f429_disco: LVGL ported to STM32F429I-DISC1 using SW4STM32 (Ac6) IDE LVGL ported to STM32F429I-DISC1 using SW4STM32 (Ac6) IDE - GitHub - lvgl/lv_port_stm32f429_disco: LVGL ported to STM32F429I-DISC1 using SW4STM32 (Ac6) IDE github.com LVGL 라이브러리는 STM32 DMA2D를 사..
InSync가 드디어 드롭박스를 지원하는 버전을 릴리즈 하였다. Dropbox가 연결기기 제한으로 InSyn를 설치하여 구글 드라이버와 드롭박스롤 싱크하여 드롭박스를 설치할 수 없는 PC는 InSync를 사용하는 방법 클라우드 파일을 관리하였다. 최대한 두 클라우드를 동기화 신경쓰지 않게 구성 하였지만, 그래도 여전히 하나의 클라우드를 사용할 때 보다는 신경을 써야 한다. InSync - 우분투 Google Drive 클라우드 서비스로 Dropbox를 매우 만족하며 사용하였지만, 요금 정책 개편으로 인해 무료 사용자의 연결기기 제한으로 더 이상 사용에 불편함이 있어 Google Drive로 변경하려고 한다. Google Drive App memories.tistory.com 어제 InSync에서 드롭박스..
STM32 프로젝트에 UI 기능을 포함하기 위해 LVGL 라이브러리를 사용하려고 한다. 많은 사용자 층이 있고, 꾸준한 업데이트가 진행되고 있는 오픈소스 프로젝트이며, 결정적으로 UI 결과를 타겟보드에서 올려서 확인하는 것이 아니라 Host PC에서도 기능 확인이 가능하기 때문에 LVGL 라이브러리를 사용하기로 결정하였다. 또한, 다양한 플랫폼에 인식되어 있으며, STM32F429 DISC 데모보드에도 포팅되어 GitHub에서 예제소스를 받아서 확인할 수 있다. STM32 타켓보드에 포팅하는 방법은 다른 포스트에서 작성하기로 하고, 이 포스트에서는 LVGL 시뮬레이터를 사용하여 Host PC에서 어떻게 기능을 검증하고 개발하는 방법을 정리할 것이다. Host PC는 우분투 20.04 버전이며, Visua..
LVGL 그래픽 라이브러리를 사용하고 STM32 개발보드의 UI를 구성하려고 한다. LVGL 라이브러리는 GitHub에서 다운받아 사용할 수 있으며, 이 저장소를 내 작업환경에 서브 모듈로 등록하여 아래의 명령어를 사용하여 등록할 수 있다. $ git submodule add $ git submodule init $ git submodule update 위 명령어를 사용하여 서브모듈을 등록하면 .gitmodules 파일이 생성되며, 추가한 서브 모듈의 저장소 위치 및 로컬 경로를 확인할 수 있다. $ vi .gitmodules [submodule "Core/Src/extlib/graphic/LVGL/lvgl"] path = Core/Src/extlib/graphic/LVGL/lvgl url = git@g..
STM32 내장 FLASH가 아닌 외부 FLASH에 데이터를 읽고 쓰는 것이 가능하지만, DMA를 사용하지 않는다면 상당히 느린 속도로 데이터를 읽고 쓰게 될 것이다. FLASH는 같은 영역에 데이터를 overwrite 할 수 없기 때문에, 같은 영역에 데이터를 쓰려면 블럭 또는 섹터 단위로 기록할 영역을 지우고 써야하기 한다. 따라서, 쓰기 속도는 DMA를 사용하여도 괄목할만한 속도 개선이 되지 않지만 읽기 속도는 엄청난 향상을 볼 수 있다. 위 이미지는 1MB 데이터를 읽고 쓰는데 걸린 시간을 ms 단위로 출력한 것이며, DMA 사용 유무에 따라 읽기 속도가 확연히 차이가 나는 것을 확인할 수 있다. STM32F429에서 180MHz 시스템 클럭을 사용하고 있으며, SPI는 아래와 같이 설정하였다. ..
RDK 2021q1 릴리즈 버전은 DTVKit이 포함된 것을 확인하고, 아래 글을 참고하여 Raspberry Pi3에 RDK을 올려서 DTVKit기반으로 개발된 동작하는 DVBApp을 확인하였다. rpidtv [DTVKit Wiki] dtvkit.org DTVKit은 DVB TS를 수신하기 위한 Tuner driver가 필요하며, 이것은 LinuxTV에서 찾아 펌웨어를 설치하도록 한다. TV 수신카드도 없고, USB Tuner driver가 없는 관계로 DVB 기능은 검증할 수 없으므로, 이 기능을 제외하고 기본 DTVKit 라이브러리 구조와 DVB App이 어떻게 작성되었는지 확인하려고 한다. Yocto 기반으로 개발환경을 구성한 RDK를 매번 빌드하고 이미지를 쓰는 것은 매우 번거로운 일이며, 단순히..
Tiny Project로 CAN 송수신 모듈을 만들고 있는데, 실시간 처리가 필요없는 것은 CLI를 사용하여 하였으나 엔진 RPM 같은 경우는 J1939 스펙상 10ms 단위로 지속적으로 보내야 하며, Engine RPM 값이 가변적으로 변해야 하므로 ADC로 입력 받은 값을 Engine RPM으로 설정하여 간단한 테스트 코드를 작성하였다. STM32 핀 설정은 위와 같이 하였으며, 기존 GitHub의 CANTest2 설정에서 ADC IN7을 추가하였다. ADC 관련 부연 설명 및 관련 설정은 아래 블로그 자세히 다루고 있다. 잘 이해가 되지 않는다면 아래 동영상을 참고하면 더 좋을 것이다. [STM32 HAL] ADC#Single Conversion Reference: Mastering STM32 by..
이 블로그를 시작한지 6개월만에 방문자 수가 10,000명이 넘었다. 정확히 10,000명 되었을 때를 캡쳐하려고 했는데, 안타깝게도 그것은 실패하였다. 누구에게는 10,000명의 방문자가 블로그 개설한지 1-2개월만에 도달하는 수치이지만, 이 블로그는 꽃삽질을 방지하기 위한 블로그로 방문자가 극히 제한적일 것이라고 생각하였고, 네이버 노출이 거의 되지 않아 큰 기대없이 블로그에 글을 작성하였을 뿐이데, 생각보다 빠르게 방문자 수 10,000명에 도달한 것 같다. 위 통계 자료만 보아도 평일 방문자 수는 100명 내외이며, 주말은 60명 내외이다. 그리고 네이버나 다음에서 유입되는 수치는 1-2% 내외인 것을 확인할 수 있다. 구글이 없었다면 이 블로그의 외부 유입은 전무했을 것이다. 그리고 생각보다 직..
6월 초에 BG96 LTE&GPS 모듈을 지인에게 빌려 간단한 기능 검증을 하려고 하였지만, 6월은 올해 최악의 컨디션으로 지낸 기간이 아닐까 싶다. 6월 초에는 몸살로 일주일을 앓아 눕고 정말 체력이 떨어진것을 새삼 느끼게 되었고, 이번주는 아스트라제네카 잔여백신 예약에 성공하여 백신 접종에 따른 부작용(?)으로 며칠 몽롱한 상태로 지내다 이제야 정신을 차려 BG96 모듈의 기능을 검증하려고 한다. 지인에게 받은 모듈을 3개의 uart 포트 및 1개의 usb 포트로 구성되며, usb 포트를 연결할 경우 Quectel에서 제공하는 프로그램을 사용하여 AT 커맨드 및 시리얼을 확인할 수 있다. 만약 Quectel에서 제공하는 프로그램을 사용하지 않고 uart 포트를 연결하여 시리얼 데이터를 받고자 한다면,..
STM32F429 내장 메모리는 256KB이기 때문에 이미지 처리나 그래픽 효과를 사용하려면 내장 메모리 용량이 부족하여 외부 SDRAM을 사용해야 한다. STM32는 외부 메모리를 제어하는 컨트롤러(FMC)를 내장하고 있으며, 이것을 사용하여 PSRAM, NOR, NAND, SDRAM을 제어할 수 있다. CubeIDE에서 FMC 활성화시키면 사용하는 기본 핀 배치로 설정되며, STM32F429 데모보드를 사용할 경우 핀설정은 그대로 사용하면 되지만, 램타이밍은 데이터시트를 참고하여 설정해야 한다. 위 SDRAM 데이터 시트를 참고하여 STM32 FMC 설정과 SDRAM 타이밍을 아래와 같이 설정할 수 있다. STM32F429 데모보드는 8MB SDRAM이 있으며, SDRAM Bank2에 연결되어 있다...
STM32F4xx / STM32F7xx 계열을 그래픽 가속기인 DMA2D 모듈을 포함하고 있으며, ST는 이것을 사용하여 효율적인 그래픽 처리를 할 수 있다고 한다. 기존 LCDTest3Touch 예제에서 추가 핀설정은 없으며, DMA2D 모듈만 아래와 같은 설정으로 활성화 시키도록 한다. 참고로 외부 SDRAM을 사용하지 않기 때문에 Color Mode를 RGB565로 설정한다. 그리고, MCU 내부 메모리를 사용하기 때문에 Transfer Mode를 Register to Memory로 설정하도록 한다. 다음 포스트에서는 외부 SDRAM을 사용하는 방법을 알아볼 예정이다. 그래픽 처리는 노가성이 많고, LvGL이나 TouchGFX와 같은 라이브러리를 사용하여 개발하는 것이 효율적이기 때문에 이 포스트에..
지난 포스트를 이어서 STM32F429I-DISC1 데모보드에서 LCD 기능을 검증 및 테스트하고 있다. 이번 포스트에서는 LCD 터치패드를 검증하고자 한다. 그동안 구글링을 통해 참고 자료나 예제코드를 찾았는데, 알고보니 STM32 라이브러리 디렉토리에 ST에서 판매하는 데모보드에 대한 예제 코드가 있는 것이 아닌가...? 구글링에서 찾은 예제 코드들의 출처가 궁금하였는데, 등잔 밑이 어둡다고 STM32 CMSIS 라이브러리 디렉토리에 있을 것이라곤 생각치 못하였다. 어쨌든, 이 예제 코드를 참고하여 인터럽트 방식의 터치패드를 간단히 검증하였다. STM32F429I 데모보드의 LCD 모듈은 LCD IC인 ili9341과 터치패드 및 온도센서 IC인 STMPE811으로 구성되며, 이것을 통하여 이미지 및..
STM32 그래픽 라이브러리(LvGL)를 사용하려면 먼저 LCD를 동작시켜야 되기 때문에, LCD 초기화 및 제어하려면 몇가지 학습이 필요하다. 아래 블로그를 참고하여 STM32F429I-DISC1 데모보드의 LCD 관련 핀 및 모듈 설정을 한다. 7.[STM32F429] TFT LCD -LTDC 사용 1. STM32CubeMX 설정 여기서 중요!!! LTDC를 설정하면 핀설정이 아래와 같은데 핀설정이 실제 핀 설정이랑 틀리므로 변경 해줘야 한다. 2. TrueSTUDIO 설정 이젠 개발 환경 설정을 합시다~! 일단 BSP를 이용 hnydiy.tistory.com 위 블로그는 CubeMX와 TrueStudio로 작업하였으나, 이 포스트에서는 CubeIDE를 기준으로 정리하여, 위 블로그의 소스코드를 Cu..
일반적으로 CAN 데이터는 8바이트 크기를 전송되지만, 8바이트 이상의 데이터를 전송하기 위해 특별한 방법을 사용하여 J1939 프로토콜은 BAM(Broadcast Announce Message) 방식으로 최대 1785바이트를 전송할 수 있다. J1939 프로토콜은 0xEC00 / 0xEB00 PGN을 사용하여 멀티패킷을 전송하며, CM(Connection Management) 메시지는 멀티패킷의 PGN 및 길이 패킷 개수 정보를 나타내며, DT(Data Transfer) 메시지는 패킷 인덱스 및 데이터를 포함하고 있다. 아래 포스트에서 작성한 코드에서 멀티 패킷을 수신하는 코드를 추가할 것이며, 기존 코드에서 변경된 사항을 패치로 정리할 것이다. STM32 CAN 32비트 멀티 필터 설정 J1939 프..
J1939 프로토콜의 CAN 데이터를 수신하여 처리하려면 CAN 통신속도 250kbps, 샘플포인트 87%로 설정해야 한다. 내부클럭(HSI)을 사용할 경우 MCU의 상태에 따라 클럭이 틀어져서 CAN 데이터를 수신 못하는 문제가 발생하기 때문에 아래 이미지와 같이 외부 크리스탈을 사용하도록 한다. STM32F429 데모보드의 최대 클럭은 180MHz이므로, 위 클럭설정처럼 최대 클럭을 사용하도록 한다. CAN1이 사용하는 APB1 버스클럭은 45MHz으로 설정된다. CAN에서 통신속도 및 샘플포인트를 설정하는 것이 가장 중요하며, 아래 PPT 파일 내용과 동영상을 참고하여 J1939 프로토콜에서 사용하는 통신속도와 샘플포인트를 설정해야 한다. 250kbps의 1비트 타임은 4us이며, 20개의 타임퀀텀..