본문 바로가기

MCU/STM328

STM32CubeMX에서 아두이노 스타일 사용자 코드 구조 만들기 STM32CubeMX는 STM32 마이크로컨트롤러용 프로젝트를 쉽게 생성할 수 있는 강력한 도구입니다.하지만 기본적으로 CubeMX가 생성하는 코드는 main.c 안에 모든 초기화 코드와 주변장치 핸들러가 몰려 있어 프로젝트가 커질수록 관리가 어려워집니다.아두이노처럼 setup()와 loop() 구조를 적용하면, 사용자 코드를 CubeMX 자동 생성 코드와 분리하여 깔끔하게 관리할 수 있습니다.이번 글에서는 CubeMX에서 아두이노 스타일 코드 구조를 만들고, 전역 변수와 USART 핸들러를 안전하게 사용하는 방법까지 소개합니다.1. 기본 CubeMX 구조CubeMX로 USART 하나를 활성화하고 프로젝트를 생성하면, main.c는 대략 다음과 같이 구성됩니다:int main(void){ HAL_Ini.. 2025. 9. 14.
ADXL345 가속도 센서  STM32 HAL 라이브러리 드라이버 코드 구현 이 문서는 ADXL345 3축 가속도 센서를 STM32 마이크로컨트롤러와 HAL 라이브러리를 이용해 완벽하게 제어하는 방법을 안내합니다. 센서의 상세 사양부터, 핀 연결, 그리고 실제 동작하는 디바이스 드라이버 코드까지 단계별로 설명합니다.1. ADXL345 가속도 센서 사양ADXL345는 저전력, 소형, 3축 가속도 센서로, 정적(Static) 및 동적(Dynamic) 가속도 측정이 가능합니다. 특히 다양한 내장 기능 덕분에 복잡한 알고리즘 없이도 충격 및 동작 감지를 손쉽게 구현할 수 있습니다.측정 범위: ±2g, ±4g, ±8g, ±16g (사용자가 설정 가능)해상도: 10비트 고정 해상도 또는 Full Resolution 모드(최대 13비트) 지원통신 인터페이스: 4-wire SPI (직렬 통신).. 2025. 8. 24.
STM32 ADC 샘플 타임 설정 방법과 실무 팁 STM32 마이크로컨트롤러의 ADC는 샘플 앤 홀드 방식으로 아날로그 신호를 디지털 값으로 변환합니다. STM32 ADC 샘플 타임 설정은 변환 정확도와 성능에 큰 영향을 미칩니다. 이 글에서는 STM32 ADC 샘플 타임 설정 방법과 실무 팁을 이론과 실용적으로 설명하겠습니다.STM32 ADC 샘플 타임이란STM32 ADC 샘플 타임은 입력 전압을 샘플링 캐패시터(\(C_{adc}\))에 충전하는 시간으로써, STM32에서는 ADC 클럭 사이클 단위(예: 1.5, 7.5, 28.5, 55.5 사이클)로 설정됩니다. 샘플 타임이 너무 짧으면 캐패시터가 충분히 충전되지 않아 ADC 값이 부정확해지고, 너무 길면 변환 속도가 느려집니다.(STM32 ADC 샘플 타임에 영향을 미치는 요소STM32 ADC 샘플.. 2025. 8. 21.
STM32 에서 PWM Soft Start 구현: 모터와 LED 제어를 위한 부드러운 시작 STM32 마이크로컨트롤러를 사용해 PWM 신호(PWM signal)를 생성할 때 Soft Start(소프트 스타트, Soft Start) 기능을 구현하는 방법을 알아보겠습니다 . Soft Start는 PWM 듀티 사이클(PWM duty cycle)을 점진적으로 증가시켜 모터, LED, 전원 공급 장치 등의 부하에서 급격한 전류 변화를 방지합니다. 이 글에서는 STM32CubeMX와 HAL 라이브러리(HAL library)를 사용한 두 가지 구현 방법(소프트웨어 기반, 타이머 인터럽트 기반)을 상세한 주석이 포함된 예제 코드와 함께 설명합니다 . 초보자도 쉽게 따라 할 수 있도록 구성했습니다 키워드 (Keywords): STM32 PWM, Soft Start, 듀티 사이클 (Duty Cycle), 타이.. 2025. 8. 21.
STM32 링커 스크립트: 상세 설명, 구조, 작성 방법 및 예제 (STM32 Linker Script: Detailed Explanation, Structure, Writing Methods, and Examples) 1. 링커 스크립트 개요 (Overview of Linker Script)STM32 마이크로컨트롤러의 링커 스크립트는 컴파일된 소스 코드를 실행 가능한 파일(.elf)로 변환할 때, 코드와 데이터를 메모리의 적절한 위치에 배치하는 역할을 합니다 (The Linker Script for STM32 microcontrollers controls the placement of code and data in memory when converting compiled source code into an executable file (.elf)). STM32는 ARM Cortex-M 기반의 32비트 마이크로컨트롤러로, 모터 제어, IoT, 임베디드 시스템 등 다양한 애플리케이션에 사용됩니다 (The STM32, a .. 2025. 8. 18.
STM32로 Modbus RTU Slave 코드 구현: DMA와 저전력 최적화 모드버스 RTU는 산업 자동화에서 널리 사용되는 통신 프로토콜입니다. 이 글에서는 STM32L432KC 마이크로컨트롤러를 사용해 Modbus RTU 슬레이브를 구현하는 방법을 설명합니다. DMA, 링버퍼, 저전력 모드, 80MHz 클럭을 활용해 최적화된 코드를 제공하며, 초보자와 숙련자 모두를 위해 상세한 주석과 설명을 포함하였습니다.1. 모드버스 RTU 개요모드버스 RTU(Remote Terminal Unit)는 모드버스 프로토콜의 바이너리 기반 변형으로, 주로 시리얼 통신(RS-232, RS-485, RS-422)을 통해 산업 자동화 환경에서 장치 간 데이터를 교환하는 데 사용됩니다. 모드버스 RTU는 마스터-슬레이브 구조를 따르며, 간단하고 효율적인 데이터 전송으로 인해 PLC, SCADA, HMI.. 2025. 8. 13.
STM32G474 를 이용한 동일 어드레스를 갖는 64채널 I2C 디바이스 제어 목적: STM32G474 마이크로컨트롤러와 TCA9548A I2C 멀티플렉서를 사용하여 동일한 I2C 주소를 가진 64개 디바이스를 제어하는 방법을 구현하고 설명한다.1. 개요본 내용은 STM32G474를 사용하여 동일한 I2C 주소를 가진 64개 디바이스를 제어하기 위해 TCA9548A I2C 멀티플렉서를 활용한 구현 방법을 기술한다. TCA9548A의 A0~A2 핀은 하드웨어적으로 고정되어 있으며, 단일 채널 번호(0~63)를 입력받아 TCA 인덱스와 내부 채널을 계산하는 간소화된 함수를 제공한다. 코드는 STM32CubeIDE와 HAL 라이브러리를 기반으로 작성되었으며, 데이터 읽기/쓰기 기능을 지원한다.2. 시스템 구성2.1 하드웨어 구성마이크로컨트롤러: STM32G474 (I2C1 사용, SCL.. 2025. 8. 12.
STM32H503RB I3C 통신 코드 구현: 초보자를 위한 상세 가이드 MIPI I3C(Improved Inter-Integrated Circuit)는 I2C의 후속 프로토콜로, 최대 12.5MHz의 데이터 전송 속도, 저전력 설계, 동적 주소 지정, 인-밴드 인터럽트(IBI)를 제공합니다. STM32H5 시리즈는 I3C 하드웨어 컨트롤러를 내장하여 센서, 메모리, 카메라 등과 효율적으로 통신할 수 있습니다. 이 가이드는 STM32H5(NUCLEO-H503RB)와 LSM6DSO 센서(X-NUCLEO-IKS01A3)를 사용해 I3C 통신을 구현하는 방법을 단계별로 설명합니다. 동적 주소 지정, 가속도 데이터 읽기, IBI 처리, UART 디버깅을 포함하며, STM32CubeMX와 STM32CubeIDE를 활용합니다. 모든 코드에는 이해를 돕도록 상세 주석을 추가하였습니다.키워.. 2025. 8. 10.