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개의 타임퀀텀..
STM32 개발환경은 CubeIDE 설치하면 STM32 관련 개발 툴을 더 이상 설치할 필요가 없다. 처음에는 이것저것 설치하였으나 CubeIDE 플러그인에 필요한 개발툴이 대부분 포함되어 있어 기본 설치되는 플러그인으로 처리가 가능하다. STM32CubeIDE는 아래 링크에서 다운받을 수 있으며, CubeIDE를 설치하기 전에 CubeIDE 설치에 필요한 의존성 패키지를 설치하도록 한다. $ sudo apt install libncurses5 git STM32CubeIDE - STMicroelectronics STM32CubeIDE - Integrated Development Environment for STM32, STM32CubeIDE-RPM, STM32CubeIDE-Lnx, STM32CubeIDE..
파이썬 코드를 하나의 실행파일로 만들어 사용하려면 pyinstaller 모듈을 설치해야 한다. $ pip install pyinstaller pyinstaller는 다양한 옵션을 제공하고 있으며, 자주 사용하는 옵션은 아래와 같다. --onefile (-F) 단일 실행 파일로 생성 --noconsole 윈도우 & 맥OS에서 콘솔창 출력 없이 실행 --distpath 최종 생성 파일 경로 지정 --workdpath 임시 작업 파일 경로 지정 --path 파이썬 코드에서 참조하는 모듈 경로 지정 add-data 실행에 필요한 non-binary 파일 지정 단일 실행 파일로 생성할 경우 실행 파일에 포함시킴 윈도우는 key, value를 세미콜론(;)로 구분하며, 유닉스 계열의 시스템은 콜론(:)으로 구분 e..
윈도우 환경에서 SecureCRT 만한 터미널 프로그램이 없지만, 상용 프로그램이기 때문에 구입해서 사용해야 한다. 그런데 1카피 가격도 만만치 않은 관계로, 윈도우에서 터미널 프로그램으로 Putty 또는 Teraterm을 사용하였다. 잘 만들어진 프로그램을 개발사가 원하는 가격에 판매하는 것은 당연한 것이지만, 조금 불편하지만 대안할 수 있는 무료 프로그램이 존재한다면, 회사에 구입을 요청하기 어렵기 때문에 그동안 윈도우에서는 터미널 프로그램을 사용할 일을 만들지 않았다. 개발은 대부분 리눅스 환경에서 하기에 사용하지 않았지만, 개발한 제품이 윈도우 환경에서 잘 동작하는지 확인하기 위해 SecureCRT를 대안할 수 있는 터미널 프로그램을 찾다가 발견한 것이 MobaXterm 이다. MobaXterm는..
마이크로소프트가 우분투 버전의 VisualStudio Code 제공하는 것에 한번 놀랐는데, 자사 브라우저를 리눅스 및 맥OS에서 설치할 수 있는 베타 버전을 출시하여 또다시 놀라고 있는 중이다. 리눅스를 개똥으로 안보던 마이크로소프트가 이렇게까지 리눅스 및 오픈소스 진영을 지원하는 것을 보면, XP 쓰던 시절에는 상상도 못할 일이다. 요즘 보면 어떤 회사보다도 더 리눅스 버전의 자사 소프트웨어를 제공하고 있다. 믿었던 구글도 리눅스 버전의 구글 드라이버 지원하지 않아, Insync 상용 프로그램을 따로 구입하여 사용하고 있다. 우분투 및 맥OS 버전의 엣지 브라우저의 베타 버전은 아래 사이트에서 다운받을 수 있으며, 정말 다양한 플랫폼을 지원하고 있다. 우분투 버전은 이미 선택되어 있어 아래 이미지에는..
STM32F429 개발보드에서 시리얼로 출력되는 json 결과를 이용하여 J1939 데이터를 파싱하여 출력하는 간단한 모니터링 앱을 만들기 위해 파이썬으로 시리얼 통신 방법을 구글링 한 결과, pyserial 모듈을 사용하면 간단히 시리얼 통신을 할 수 있어 pip로 pyserial 모듈을 설치하도록 한다. $ sudo pip3 install pyserial 시스템 전체에 설치하고 싶지 않다면 가상환경을 만들어서 프로젝트 디렉토리에 설치하는 것도 가능하다. pyserial 모듈을 사용하여 시리얼 통신하는 방법은 인터넷에 많은 자료가 있기에 자세한 설명은 생략하기로 하고, STM32 개발보드에서 발생한 문제를 수정한 것들을 정리한 것이다. 위 앱은 일정주기로 사용자가 원하는 J1939 메시지를 PCAN_X..
파이썬 가능환경을 구성해야 하는 이유와 방법은 아래 블로그에 자세히 설명되어 있다. 파이썬에서 venv로 가상 환경 사용하기 Engineering Blog by Dale Seo www.daleseo.com 이 포스트는 위 블로그 내용을 바탕으로 속성으로 venv 사용 방법 및 VisualStudio Code 설정도 함게 정리한 것이다. 우선 venv 패키지를 설치하도록 한다. $ sudo apt install python3-venv 파이썬은 외부 라이브러리를 설치하여 개발하기 때문에, 다른 환경에서 라이브러리 버전 차이 및 미설치로 동작이 안되는 경우가 있기 때문에 개발에 필요한 라이브러리를 개발 디렉토리에서 가상의 환경을 만들어 사용하면 라이브러리로 인한 문제는 피할 수 있다. 위 블로그의 설명과 처럼..
zsh shell을 많이 사용하는 것은 알고 있었지만, bash shell을 사용함에 큰 불편함이 없고 새로운 것을 익히는 것이 부담스러워 지금까지 우분투에서 bash를 사용했지만, git branch 관리함에 있어 zsh shell 가독성이 설치하였다. 우분투에서 zsh 설치는 기본 저장소에 있는 버전을 사용해도 문제가 없으며, 보다 편한 zsh shell 환경을 구성하기 위해 oh my zsh 프레임워크를 함께 설치하도록 한다. $ sudo apt install zsh $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 기본 Shell을 bash에서 zsh로 변경하기..
KODI는 XBMC 재단에서 만든 홈시어터(HTPC)를 위한 멀티미디어 플랫폼으로 다양한 운영체제 및 플랫폼을 지원하고 있다. 라즈베리파이에는 Standalone으로 실행이 가능하며, 우분투에서는 앱으로 설치 및 실행이 가능하다. 코디 (소프트웨어) - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 코디코디 17.6 홈 스크린개발자코디 팀발표일2004년 6월 29일 (16년 전)(2004-06-29) (엑스박스 미디어 센터 기준)안정화 버전19.0[1] / 2021년 2월 20일 (60일 전)미리보기 ko.wikipedia.org 우분투 저장소에는 최신버전이 없기 때문에 아래의 저장소를 추가하여 kodi를 설치하도록 한다. $ sudo add-apt-repository ppa:team..
STM32CubeIDE를 사용하여 윈도우 환경에서 소스코드를 생성한 것을 리눅스 환경에서 포트 변경이나 추가로 인해 코드를 다시 생성하면 윈도우 리눅스간 개행문자 차이로 인해 소스 버전관리 도구인 GIT은 아래 이미지와 같이 코드가 변경된 것으로 인식한다. 개행문자를 제외한 나머지 코드는 동일한데 이것을 소스 변경사항으로 올릴 경우 코드 버전 관리가 안되기 때문에 dos2unix를 사용하여 변경된 개행문자를 통일 시키도록 한다. 파일이 한개라면 문제가 없겠지만, 수많은 파일을 변경해야 된다면 이것 또한 일이기 때문에 아래의 명령어를 사용하여 일괄적으로 변경할 수 있다. $ find . -type f | xargs dos2unix dos2unix는 텍스트 파일에만 적용되며, 바이너리 파일을 변환하지 않기 ..