PIC16 개발보드가 하나 생겨 잠깐 가지고 놀아보기 위해 MPLAB X IDE 설치해야 한다. 여기서 각 플랫폼별 다운로드가 가능하다. 이 글에서는 우분투 22.04 버전에서 설치한 것을 간단히 정리할 예정이다. 리눅스 버전은 tarball로 제공되며, 압축 풀고 아래 명령어를 실행하도록 한다. $ tar xvf MPLABX-v6.05-linux-installer.tar $ sudo ./MPLABX-v6.05-linux-installer.sh MPLABX-v6.0.5-linux-installer.sh 실행하면 아래와 같이 설치 화면을 확인할 수 있다. 특별한 설정없이 Next를 선택하면 되는데, 모든 마이컴을 지원할 경우 디스크 공간을 많이 요구되기 때문에 8비트만 설치하도록 하였다. jtag(?)을 ..
부팅 속도를 개선하기 위해 대시보드 이미지 파일인 PNG를 디코딩하여 플래시에 저장하여 PNG 디코딩 과정에서 발생하는 시간을 없애 부팅 속도를 개선하려고 한다. 외부 플래시에 데이터를 저장하기 때문에 저장된 데이터의 무결성 검사를 해야하며, 일반적으로 MD5, SHA1, SHA256을 많이 사용하지만, STM32F4는 H/W CRC32만 제공하여 CRC로 데이터 무결성을 하려고 한다. STM32F4에서 H/W CRC를 사용하기 위해 아래 이미지와 같이 CubeIDE의 CRC 연산을 활성화 시키도록 한다. CubeIDE에서 CRC가 활성화되면 아래 코드가 자동으로 생성되며, 아래 생성된 CRC 핸들를 사용하여 H/W CRC 연산을 할 수 있다. static void MX_CRC_Init(void) { h..
RPM, 오일 그리고 냉각수 게이지를 디지털 판넬에 표시하기 위해 LVGL 라이브러리의 arc 관련 함수를 사용하면 쉽게 그릴 수 있는데, 기존 소스에서 게이지바와 눈금 바늘 사이에 약간에 오차가 있어 계산을 수정하면서 LVGL arc 함수를 정리하였다. 아래 이미지는 게이지바와 눈금 바늘을 표시하는 간단한 예제이다. 위 예제처럼 게이지바는 특정 범위에 들어오면 경고를 표시하기 위해 빨간 색으로 표시하는 구간이 있으며, 눈금 바늘은 게이지바의 끝에 위치해야 한다. LVGL 라이브러리를 사용하여 호를 그리기 위해 lv_arc_create() 함수로 arc 인스턴스를 생성하도록 하고, 호의 위치와 크기를 지정하도록 한다. *arc = lv_arc_create(lv_scr_act()); lv_obj_set_p..
LVGL v8.0.02 포팅 과정을 진행하면서 이전 펌웨어의 기능을 개선하고 있으며, 그 중 하나가 부팅 로고를 USB로 바꾸는 기능을 추가하려고 하는데, 개발보드에서 USB 인식이 되지 않아 STM32F429 Disc보드에서 USB OTG를 검증하였다. 디스커버리보드는 아래 이미지와 같이 Micro USB 포트를 제공하고 있어 따로 와이어 연결을 할 필요가 없다. 기본 USB 포트를 사용하려면 아래 회로도를 참조하여 CubeIDE 핀설정을 하도록 한다. PB13 / PB USB OTG 모드를 HS로 설정하여도 내부 파이 사용시에는 최대 12Mbit/s 속도로 제공되며, 외부 파이를 사용할 경우에는60Mbit/s 속도를 제공하나 아래와 같이 Disc 데모보드 그렇고 개발보드 역시 내부 파이를 사용하기 때..
LVGL 8.0.2 버전을 사용하여 대시보드는 기존과 동일하게 구성하고 메뉴는 기존과 다르게 LVGL 위젯을 사용하였다. 시간에 쫓겨 메뉴 하나, 하나를 직접 그리고 GPIO input을 press / release를 직접 구현하였는데, 이번에는 LVGL 라이브러리에서 위젯을 사용하여 메뉴를 구성하였다. LVGL 에뮬레이터를 사용하여 PC에서 작업한 UI 및 메뉴는 아래 이미지와 같이 구성하였다. 기존 코드와 다르게 menu depth 기능을 추가하여 서브 메뉴를 갖을 수 있으며, 하위 메뉴를 갖는 상위 메뉴는 LVGL 8.0 버전부터 지원하는 Grid Layout을 사용하였다. 참고로, Main Menu와 Factory Setup은 하위 메뉴를 갖는 메뉴이다. 위 이미지처럼 LVGL 위젯을 사용하여 메..
LVGL은 key_read_cb에서 정상적으로 키를 올려준다면 자동으로 모든 키에 대해 repeat key 처리가 된다. 특정 키에 대해선 repeat key를 처리하지 않으려면 key_read_cb에서 키를 올려주지 않으면 key repeat interval time을 계산하지 않기 때문에 repeat key 처리가 되지 않는다. LVGL에서 repeat key 종류를 등록하는 것이 있는지 모르겠지만, 코드상 분석한 결과 key_read_cb에서 특정 키에 대해 처리하지 않으려면 LVGL 시뮬레이터인 경우 lv_drivers/indev/keyboard.c 파일을 아래와 같이 수정하면 된다. index 0c08685..d2e2a04 100644 --- a/indev/keyboard.c +++ b/inde..
기존 개발 코드는 Input device를 GPIO로 받아서 처리하였는데, LVGL input device와 연결하지 않고 GPIO를 직접 컨트롤하여 key pressed, key released 및 repeat key 처리를 구현하였다. 이렇게 직접 코딩한 이유가 있겠지만, 키처리 코드는 매우 복잡하며 메뉴하고 연결한 부분은 완전 블랙홀에 가까워 LVGL input device에 GPIO를 연결하여 키 처리하는 방법을 찾아 블로그에 정리한다. 우선 개발보드에는 버튼을 위해 아래와 같이 5개의 GPIO input을 할당하였으며, 5개의 GPIO 버튼을 LVGL 키패드로 연결하여 사용하려고 한다. uint8_t gpio_get_key_state(uint8_t key_code) { uint8_t value ..
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를 사..
STM32 프로젝트에 UI 기능을 포함하기 위해 LVGL 라이브러리를 사용하려고 한다. 많은 사용자 층이 있고, 꾸준한 업데이트가 진행되고 있는 오픈소스 프로젝트이며, 결정적으로 UI 결과를 타겟보드에서 올려서 확인하는 것이 아니라 Host PC에서도 기능 확인이 가능하기 때문에 LVGL 라이브러리를 사용하기로 결정하였다. 또한, 다양한 플랫폼에 인식되어 있으며, STM32F429 DISC 데모보드에도 포팅되어 GitHub에서 예제소스를 받아서 확인할 수 있다. STM32 타켓보드에 포팅하는 방법은 다른 포스트에서 작성하기로 하고, 이 포스트에서는 LVGL 시뮬레이터를 사용하여 Host PC에서 어떻게 기능을 검증하고 개발하는 방법을 정리할 것이다. Host PC는 우분투 20.04 버전이며, Visua..
STM32 내장 FLASH가 아닌 외부 FLASH에 데이터를 읽고 쓰는 것이 가능하지만, DMA를 사용하지 않는다면 상당히 느린 속도로 데이터를 읽고 쓰게 될 것이다. FLASH는 같은 영역에 데이터를 overwrite 할 수 없기 때문에, 같은 영역에 데이터를 쓰려면 블럭 또는 섹터 단위로 기록할 영역을 지우고 써야하기 한다. 따라서, 쓰기 속도는 DMA를 사용하여도 괄목할만한 속도 개선이 되지 않지만 읽기 속도는 엄청난 향상을 볼 수 있다. 위 이미지는 1MB 데이터를 읽고 쓰는데 걸린 시간을 ms 단위로 출력한 것이며, DMA 사용 유무에 따라 읽기 속도가 확연히 차이가 나는 것을 확인할 수 있다. STM32F429에서 180MHz 시스템 클럭을 사용하고 있으며, SPI는 아래와 같이 설정하였다. ..
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월 초에 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으로 구성되며, 이것을 통하여 이미지 및..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.