이전 포스트에서 MCP2515 CAN 컨트롤러와 TJA1050 트랜시버가 있는 CAN 모듈을 라즈베리파이에서 사용하는 방법은 간단히 정리하였다. 이것을 사용하여 STM32F429 데모보드와 CAN 통신을 해 보려고 한다. MCP2515 & TJA1050 모듈 설정 CAN 모듈을 라즈베리파이로 검증하기 위해 CAN 컨트롤러 MCP2515와 트랜시버 TJA1050가 포함된 CAN BUS 모듈 구입하여, 라즈베리파이에 아래 이미지와 같이 연결하였다. 라즈베리파이와 CAN 버스 모듈을 memories.tistory.com STM32은 내장 CAN 컨트롤러가 내장되어 있지만 CAN 트랜시버가 없으므로 CAN 트랜시버 모듈을 따로 구입해야 하며, 이것을 사용하여 아래 이미지와 같이 STM32 & Raspberry ..
STM32는 Basic, General Purpose, Advanced 3가지의 타이머를 제공하며, 아래 블로그에서 각 타이머에 대해 간단하게 설명 및 예제 코드를 제공한다. [STM32 HAL] Timer# Basic 타이머 Reference: Mastering STM32 by Carmine Noviello** 자료 해석에 오류가 있을 수 있습니다 **[배... blog.naver.com STM32F407 데모보드에서 16비트 기본 타이머는 TIM6, TIM7로 제공하며, TIM6 타이머 처리를 폴링, 인터럽트 및 DMA 방식으로 처리하는 것을 정리할 것이다. STM32F407 데모보드의 TIM6 최대 클럭은 84MHz이기 때문에, 위 블로그를 참조하여 1초 타이머의 prescaler과 period ..
토이 프로젝트로 STM32 보드의 LED를 외부 네트워크에서 제어하는 것을 만들고 있는데, STM32보드와 PC 앱간의 데이터 통신 형식으로 json을 사용하기 위해 임베디드 환경에 적합한 경량 라이브러리인 cjson을 GitHub에서 받아 STM32에서 빌드해서 사용하였다. DaveGamble/cJSON Ultralightweight JSON parser in ANSI C. Contribute to DaveGamble/cJSON development by creating an account on GitHub. github.com GitHub에서 소스를 내려받으면 여러 파일이 존재하지만, STM32에서 사용할 파일은 cJSON.c / cJSON.h 파일만 가져오면 된다. 그리고 어떤 수정도 없이 바로 빌..
저렴한 와이파일 모듈로 ESP8266 많이 사용한다고 하여, 지인에게 여분의 ESP8266 모듈 얻어 일주일동안 토나올 정도로 아주 제대로 꽃삽질을 하였다. STM32 보드에 ESP 와이파일 모듈을 내장한 보드라면 ESP 모듈을 직접 제어하고 ESP에서 제공하는 라이브러리 사용하여 소켓프로그램을 할 수 있겠지만, STM32 Discovery 데모보드를 사용하고 있는 나로썬, UART로 ESP 마이컴과 통신하여 와이파이를 제어할 수밖에 없다. 지인에게 얻은 ESP8266 모듈에는 마이컴이 내장되어 있고, 양산용 펌웨어가 아닌 디버그 펌웨어가 올라가 있어 UART 통신 과정에서 수많은 예외상황이 발생하여 삽질의 연속이었다. 디버그 메시지로 UART RX 인터럽트가 빈번하게 발생하여 오버헤드로 인한 UART ..
아래 이미지와 같이 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..
요즘 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..
지금까지는 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 설정되..
다양한 테스트가 가능한 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..
STM32 CubeIDE는 수많은 ST MCU 및 MPU 개발을 위한 통합 개발 환경을 제공하며, 기존 TrueStudio와 CubeMX을 통합한 것이다. 따라서 CubeMX로 Pin 설정을 하고, 코드 작성을 TrueStudio로 작성했다면 이제는 CubeIDE 하나로 모든 처리가 가능하다. STM32CubeIDE - STMicroelectronics STM32CubeIDE - Integrated Development Environment for STM32, STM32CubeIDE-RPM, STM32CubeIDE-Lnx, STM32CubeIDE-Win, STM32CubeIDE-DEB, STM32CubeIDE-Mac, STMicroelectronics www.st.com CubeIDE는 윈도우, 맥OS ..
아래 블로그의 리눅스에서 STM32F4 개발환경 구성 포스팅을 참고하였으며, 우분투 20.04 버전에서 필요한 패키지 및 라이브러리 설치를 정리하였다. Blink for stm32f4-discovery board on Linux with Makefile I was inspired by this great post by Ross Wolin to make (yet) another blink tutorial for the stm32f4-discovery board on Linux. Ross Wolin did a great job writting makefiles for the peripheral libra… liviube.wordpress.com 우분투에서 STM32F4 개발환경을 구성하기 위해 아래의 필수 ..