전체 글 16

neovim 설치

vim을 사용하다보면 ctags같이 자동완성이나 검색기능을 제공하지만 cross-compile을 사용하는경우 라이브러리가 종종 꼬인다... 그리하여 neovim을 설치했다. brew instal neovim 간단하게 설치가 끝난다. 뭐.. 컴파일해서 사용하는방법을 난 사용했지만 각자 취향이 아닐까한다. 그 후 vimrc와 같이 설정을 해야하는데, 나는 kickstart.nvim을 이용했다. 내가 몇개 추가할 것이 있어 fork를 했는데, 아래링크를 참조하면된다. https://github.com/inkyu0225/kickstart.nvim GitHub - inkyu0225/kickstart.nvim: A launch point for your personal nvim configuration A laun..

기타 2023.05.07

STM32CubeIDE개발환경 구축하기

에디터를 vim을 이용하여 개발하는것을 좋아하는 사람으로써 IDE가 변경되면 빌드할 방법을 찾곤한다. 이번엔 STM32CubeIDE를 빌드하는방법을 써보겠다. 1. STM32CubeIDE command line으로 수행하기 아래와 같이 스크립트를 작성해서 사용했다. #!/bin/sh CUR_PATH=`pwd -P` PRJ_NAME="" #project명 작성 /Applications/STM32CubeIDE.app/Contents/MacOS/STM32CubeIDE --launcher.suppressErrors -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -cleanBuild ${PRJ_NAME}/Release -impor..

FW 2022.09.01

LPF(low pass filter)

low pass filter는 말 그대로 저주파를 통과시키는 필터이다. 예를들어 sampling rate가 250Hz에서 10Hz미만의 성분만 보고싶다 그러면 LPF를 사용하면 된다. 푸리에 변환을 통해 10Hz성분 미만만 역 푸리에 변환을 해도 되긴하지만 cost가 더 많이 나올것이다. 자세한 설명은 다른 블로그를 참조 바라며, 이 글에서는 LPF를 C로 구현한 소스코드를 공유할 것이다. 먼저 아래 차트와 같이 sampling rate가 250Hz인 데이터 280point가 있다. 데이터는 아래와 같다. 더보기 -2.000359297 -2.174054623 -2.35839057 -2.507937431 -2.658874989 -2.78489852 -2.877093792 -2.909906149 -2.907..

FW 2022.01.27

stm32 HAL timer(2)

timer를 통해 시간을 생성을 하다가 나중에 확인을 하면 시간이 틀어진 경우를 확인 할 수 있다. 왜 시간이 틀어지는것인가 확인을 해보면 PPM때문에 발생한 이슈였다. PPM이란 Parts per Milion의 약자이며 100만분의 1이다. MCU가 도앚ㄱ하기 위해서는 크리스털이나 오실레이터를 사용한다. 아무리 정확한 크리스털 혹은 오실레이터라도 오차가 발생할 수 있다는 것이다. 일반적으로 20PPM을사용하니 20 / 1000000정도의 오차가 생긴다. 이번에 테스트 한 장비는 25MHz 오실레이터를 사용 했으니 500Hz의 오차가 발생 할수있다는것이다. 이것을 시간으로 바꾸면 매우 큰 오차가 되니 시간을 만들때는 동기화 및 알고리즘을 잘 사용하도록 하자…

FW 2021.12.04

stm32 HAL timer(1)

FW를 개발하다보면 timer를 이용을 하게 된다. HAL에서 system tick을 이용하면 1ms마다 처리를 할 수 있지만, 그 이하의 분해능이 필요하기 마련이다. 만약 10us간 sleep을 요한다면 다른 처리가 필요하다. 그렇다면 이건 timer를 이용하여 1us간 timer를 구현을 해야한다. 나는 10us의 정밀성이 있는 timer가 필요하여 timer를 이용해야 했으며 그 방법에 대하여 기술을 하려한다. 나는 STM32F765를 사용했으니 참고하시길... 일단 STM32에는 여러가지의 timer가 있다. advenced-control, general purpose, basic 3종류가 있다. 이부분은 다음에 설명하도록... 일단 제일 잡기능이 없는 basic timer를 사용하도록하자... ..

FW 2021.10.30

IAR Heap Stack size 조절

메모리(고작해야 200Kb지만...)를 동적할당을 하다보니 메모리가 터졌다. 그리하여 동적할당을 하게되면 Heap에 저장을 하게 되니 Heap Size를 조절했다. 아래와 같이 .icf파일을 열면 /*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x08000000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_..

FW 2021.09.19

Hanning window

Fourier 주파수 변환을 위한 시간 신호 추출시 양 끝에서 발생하는 신호의 불연속을 완화가 필요하다. Window 함수는 시간 영역에서 이같이 신호의 불연속을 완화시켜 주는 함수로 원하지 않는 신호의 발생을 최대한 억제하여 원하는 신호만 구분될 수 있도록 도와주는 함수이다. 그리하여 Time 신호에서 FFT를 하기 전 Window함수를 해주어야 한다. 내가 사용할 Hanning Window의 수식은 다음과 같다. 뭔가 다르다. 무엇이 다른가 하면 아래 차트를 보자 Hanning window의 Table을 chart로 그리면 위와 같이 나온다. Max값이 2가되는 상황이다. 일반적인 Hanning window는 max값이 2가된다. 이렇게 만든 이유는 Max가1인 Hanning window를 씌우면 기..

FW 2021.09.19