저렴한 와이파일 모듈로 ESP8266 많이 사용한다고 하여, 지인에게 여분의 ESP8266 모듈 얻어 일주일동안 토나올 정도로 아주 제대로 꽃삽질을 하였다. STM32 보드에 ESP 와이파일 모듈을 내장한 보드라면 ESP 모듈을 직접 제어하고 ESP에서 제공하는 라이브러리 사용하여 소켓프로그램을 할 수 있겠지만, STM32 Discovery 데모보드를 사용하고 있는 나로썬, UART로 ESP 마이컴과 통신하여 와이파이를 제어할 수밖에 없다. 지인에게 얻은 ESP8266 모듈에는 마이컴이 내장되어 있고, 양산용 펌웨어가 아닌 디버그 펌웨어가 올라가 있어 UART 통신 과정에서 수많은 예외상황이 발생하여 삽질의 연속이었다. 디버그 메시지로 UART RX 인터럽트가 빈번하게 발생하여 오버헤드로 인한 UART ..
블로그를 새로 만들고 애드센스 승인을 2번의 뺀지와 3번의 도전으로 승인을 받았다. 애드센스에 큰 욕심을 내는 것은 아니지만, 1-2년 모아둔 애드센스 수익으로 가끔 지름신 내림을 받을 때 꽤 유용하게 사용하기 때문에 이번 블로그도 애드센스를 삽입하였다. 그리고 지금 블로그의 일 방문자는 30명 내외인데, 어느 세월에 100불을 받을 수 있을지 모르겠다. 올해 안으로 일 방문자 수 2-300명이 되었으면 좋겠지만, 방문자 수를 늘려 수익을 목표하기 보다는 여기에 내가 꾸준히 자료를 올렸으면 하는 것이 지금의 바램이다. 올해, 블로그에 파이썬과 STM32 관련 포스팅을 많이 해서 내년에는 이것을 바탕으로 미니(토이) 프로젝트를 많이 진행하는 것이 이 블로그의 진정한 목적이자 목표이다. 올해에는 이 블로그의..
우분투에서 시리얼프로그램으로 Minicom이 아닌 brokestream에서 제공하는 Tiny Serial 프로그램을 사용해왔다. Tiny serial terminal. feel free to email me at Tiny serial terminal. Small minicom replacement for accessing serial ports (com ports) on Linux inspired by FreeBSD "tip". Mainly intended for use to access serial consoles of various hardware. If you want more control over port wi www.brokestream.com 다양한 기능을 제공하는 Minicom과 다르게 터..
아래 이미지와 같이 uart를 사용하여 디버그 메시지 확인 및 사용자가 특정 기능을 확인하기 위한 커맨드를 입력할 수 있다. 이것은 개발할 때 반드시 필요한 기능이기 때문에 uart 관련 전용 파일로 만들어 다른 프로그램에서 쉽게 적용할 수 있도록 코딩하였다. 사용자 입력을 받으려면 uart data를 인터럽트로 받는 것보다 폴링 방식으로 data를 수신하는 것이 편하지만, 이 코드에서는 인터럽트 방식을 사용하였다. 따라서 아래 이미지와 같이 MCU를 설정하도록 한다. STM32CubeIDE는 MCU 설정에 맞게 소스코드를 생성하는데, 이 글에서는 UART 관련 사항을 uart.h / uart.c 파일로 관리할 것이다. 우선 main.c 파일에서 MX_USART2_UART_Init() 함수를 제거하고 u..
ST는 통합 개발환경 STM32CubeIDE를 제공하며, 이것을 사용하여 MCU 코딩 및 디버깅 환경을 제공하지만, 우분투 환경에서는 많은 리소스를 소비하여 시스템이 느려지는 현상이 발생하고, 결정적으로 이클립스가 손에 익숙치 않아 코딩하는데 매우 불편하여 STM32CubeMX + VisualStudio Code로 개발환경을 구성한 블로그를 참고하였다. Using Visual Studio Code with STM32CubeMX for ARM Development Every day, the software world is moving away from traditional software and hardware tools by replacing them with better and faster open s..
로지텍 무선 마우스의 배터리가 10% 이하로 떨어지면 우분투에서 아래 이미지와 같이 알림 메시지를 출력하는데, 이것이 부팅시 한번만 실행되는 것이 아니라, 주기적으로 실행되어 우분투 사용에 불편함을 초래한다. 배터리 교체로 이문제를 해결할 수도 있지만, 10% 미만 배터리도 1-2개월을 거뜬히 사용할 수 있기에 그냥저냥 쓰다가 떨어지면 바꿔야지 했는데, 배터리 부족 알림이 수시로 실행되어 알림을 비활성화 시키는 방법을 찾았고, 아래 블로그에 잘 설명되어 있어, 이 글에서는 간단하게 적용 방법만 정리하도록 하겠다. Disable "Mouse battery low" spam notification on Ubuntu wrgms.com 위 블로그에서는 이 문제를 upowerd 소스를 gitlab에서 내려받아 l..
요즘 IoT에 많이 사용하는 STM32 MCU의 데모보드가 생겨 우분투에서 가지고 놀다보니, 이클립스 기반의 STM32 개발 도구인 STM32CubeIDE가 무겁고 손에 익지 않아 Visual Studio Code으로 코딩 및 디버깅을 하려고 했지만, 개발환경을 구성하는 것이 쉽지 않았다. 회사 업무로 개발을 한다면 여러 사람이 함께 개발하기 때문에 보다 나은 개발환경을 서로 구성해서 공유하지만, 혼자 공부하면서 개발을 하다보니, 어떤 개발도구를 많이 사용하는지 어떻게 개발환경을 구성해야 효율적으로 구성하는 것인지를 빠른 시간에 알아가기 힘들다. 그래서 블로그에 STM32 관련 스킬이나 팁을 알게되면 하나씩 정리하고 있다. 이번 포스티에서 소개할 STM32CubeProgrammer는 ST에서 제공하는 개..
표준 입출력으로 uart로 설정하는 것은 인터럽트없이 가능하다. 아래 이미지와 같이 UART 및 LED Pin만 설정하여 printf와 scanf 동작을 확인할 예정이다. UART를 USART2으로 설정하여 PA2, PA3를 사용하고 있으며, STM32F4xx 데모보드에서 해당 Pin에 와이어를 연결하도록 한다. UART로 표준 입출력을 사용하기 위해 syscall.c 파일에 weak 함수로 설정된 _read() / _write() 함수를 재정의하여 사용하면 간단하게 구현이 가능하다. 시스템콜인 _read()와 _write() 함수를 아래와 같이 재정하여 간단하게 UART로 표준 입출력으로 설정할 수 있다 int _read(int file, char *ptr, int len) { if(HAL_UART_R..
우분투를 네이티브 OS로 사용할 때 가장 애로사항 중 하나가 바로 한글 입력이다. 윈도우와 다르게 우분투 및 다른 리눅스 배포판 대부분이 무료 운영체제이기 때문에 한글 입력에 대한 보증이 없기 때문에 사용자가 알아서 방법을 강구해야 한다. 우분투 한글 입력기(Input Method)로 iBus, Fcitx 있지만, 한글 입력기 목적으로 개발된 것이 아니기 때문에 앱(프로그램)등에서 마지막 받침 중복 입력등과 같은 여러 문제들이 있어, 항상 불편함을 느끼던 부분인데 이것을 바로 해결한 것이 한국 개발자가 만든 한글 입력기인 님프(Nimf)였다. 지금은 티엔(Tian)이라고 불리지만, 최초 개발명은 다솜(Dasom)에서 님프(Nimf)로 변경되고, 다시 이것을 티엔(Tian)으로 변경되었다. 개발자의 부심으..
지금까지는 STM32F407G 데모보드로 간단한 테스트를 진행하였지만, 지금부터는 MCU의 특정 Pin에 와이어를 연결하여 주변 장치를 제어할 예정이다. 첫번째로 개발할 때 가장 중요한 디버그 메시지를 보기 위해 UART를 연결하려고 한다. 데스크탑 PC에는 시리얼 포트가 있지만, 점점 없어지는 추세이므로 USB2Serial IC을 사용하여 UART 메시지를 출력할 것이다. USB2Serial IC는 인터넷에서 쉽게 구할수 있으며, 이 포스트에서는 CH340을 사용하였다. UART4 사용하여 시리얼 통신를 하기 위해 STM32CubeIDE를 사용하여 다음과 같이 Pin을 설정하였다. UART4-TX는 PA0을 사용하지만, PA0에 GPIO_EXTI0을 할당하여 PC10으로 할당된 것을 확인할 수 있다. ..
아래 포스트에서 GPIO Input 포트를 폴링하여 Led를 제어했다면 이번 포스트는 PA0 Pin를 인터럽트로 설정하여 Led를 제어하려고 한다. GPIO Input을 이용한 LED Control STM32F407G 데모보드는 2개의 버튼을 가지고 있으며, PA0 Pin을 GPIO Input으로 설정하여 Blue 버튼을 입력하게 되면, PA0 High로 변경되며 이때 LED를 켜지도록 할 예정이다. 아래 회로도를 참고하기 바란다. memories.tistory.com PA0 Pin을 인터럽트로 설정하려면 CubeIDE에서 아래와 같이 Pin 타입을 GPIO_EXTI0로 설정하도록 한다. 그리고 NVIC 항목에서 EXTI line0를 활성화 시키도록 한다. 위 상태로 ioc 파일을 저장하면 GPIO 초기..
STM32F407G 데모보드는 2개의 버튼을 가지고 있으며, PA0 Pin을 GPIO Input으로 설정하여 Blue 버튼을 입력하게 되면, PA0 High로 변경되며 이때 LED를 켜지도록 할 예정이다. 아래 회로도를 참고하기 바란다. STM32CubeIDE에서 PA0는 GPIO Input으로 설정하고 PD12 ~ PD15는 GPIO Output으로 설정하고 저장하면 각 Pin type과 초기값을 설정하는 템플릿 코드가 생성된 것을 확인할 수 있다. 위와 같이 CubeIDE에서 MCU 초기 설정에 대한 코드가 생성되므로, Pin 타입과 초기값에 대한 고민없이 바로 Blue 버튼 입력시 LED를 어떻게 제어할 것인가만 고민하면 된다. 위 회로도처럼 Blue 버튼이 입력되면 PA GPIO는 High 설정되..
GitHub에서 소스를 내려받았을 때, https 방식으로 받게되면 리모트 서버인 GitHub에 pull과 push를 할 때마다 ID 및 패스워드를 입력해야 하는 번거로움이 생긴다. 이런 번거로움을 없애기 위해 GitHub에 RSA Public key를 등록하여 ID/패스워드를 입력하는 과정을 생략할 수 있다. RSA Public key를 등록하기 위해서는 ssh 명령어를 사용하여 RSA key를 생성하도록 한다. $ ssh-keygen -t rsa -b 4096 -C "" -C 옵션은 생략이 가능하며, 생성된 RSA key 저장 위치를 설정해야 한다. 일반적으로 default 값이 ~/.ssh/id_rsa로 생성한다. 이 글에서는 ~/.ssh/github_rsakey로 생성하였다. 만약 여러 개의 Gi..
다양한 테스트가 가능한 STM32 개발보드를 갖고 있다면 여러가지 만들어보고 테스트 할 수 있지만, 만약 ST에서 판매하는 STM32F407VG 디스커버리 데모보드만 갖고 있다면 ST에서 제공하는 Datasheet를 참고하여 간단하게 LED 테스트 할 수 있다. 이것은 CubeIDE를 사용하여 Pin 설정과 코딩을 어떻게 하는지 학습하는데 꽤 도움이 된다. STM32F4DISCOVERY - STMicroelectronics STM32F4DISCOVERY - Discovery kit with STM32F407VG MCU * New order code STM32F407G-DISC1 (replaces STM32F4DISCOVERY), STM32F407G-DISC1, STMicroelectronics www.s..
대한민국에서 윈도우없이 웹서비스를 사용하는 것은 꿈같은 일이다. 스마트폰이 보급되면서 윈도우 종속성이 많이 줄어들긴 하였지만, 맥OS나 리눅스 환경에서는 금융업무 또는 관공서 서비스를 이용하려면 정신이 피폐해짐을 느끼게 된다. 이런 이유로 Virtualbox와 같은 가상환경을 사용하여 윈도우를 설치하여 사용하였는데, 이것도 제한 사항이 있어 어쩔수 없이 우분투와 윈도우를 부팅시 선택하여 사용하도록 Native로 설치하였다. 이렇게 설치하니 우분투에선 사용하지 않는 윈도우 파티션이 네모 파일 관리자에서 보여지는 것이 거슬려 아래 이미지와 같이 없애려고 한다. 위 이미지에서 디스크 크기를 나타내는 파티션이 윈도우에서 사용하는 NFTS 파티션이며, 이것은 윈도우에서만 사용하기 때문에 가능하면 우분투에서 마운트..