목록STM32 (7)
승코딩당당당
이번 실습에서는 STM32 Nucleo 보드(STM32L0 계열)를 기반으로 HAL 라이브러리를 활용하여 ADC, Timer, PWM, GPIO 인터럽트, UART 통신을 함께 사용하는 복합 예제를 구현해보았다. ADC를 통해 LM35 온도 센서의 아날로그 값을 읽고, Timer 인터럽트를 이용해 1초 주기의 주기 동작을 수행하며,TIM2의 PWM 기능을 활용해 PWM 듀티 비를 단계적으로 변경한다.또한 버튼과 진동 센서를 외부 인터럽트(EXTI) 방식으로 처리하여 이벤트 기반 입력 처리 구조를 확인한다. UART 통신을 통해 측정된 값과 상태 메시지를 출력함으로써, 임베디드 시스템에서 자주 사용되는센서 입력 → 타이머 기반 제어 → PWM 출력 → 시리얼 디버깅의 전체 흐름을 하나의 프로젝트 안에서 실..
마이크로컨트롤러에서 Timer(System Timer)는단순한 시간 측정을 넘어, 인터럽트 발생, 외부 이벤트 계수, 신호 캡처, 그리고 PWM 파형 생성까지 담당하는 핵심 주변장치이다. STM32를 포함한 Cortex-M 계열 MCU는 코어 내부에 SysTick(System Timer)를 기본적으로 제공하며,이 타이머는 주로 1ms 주기의 시스템 시간 관리와 RTOS의 태스크 스케줄링, Delay 구현 등에 활용된다. 또한 MCU 내부의 일반 Timer는 Prescaler(PSC), Counter(CNT), Auto Reload Register(ARR), Capture/Compare Register(CCR)와 같은 레지스터를 기반으로 동작하며, 다양한 모드를 통해 시간 기반 제어와 신호 처리를 가능하게..
이번 글에서는 STM32 Nucleo-L073RZ 보드를 이용해 LM35 아날로그 온도 센서의 출력을 ADC로 읽고, VDDA 보정을 적용해 보다 정확한 온도를 계산하는 방법을 정리한다. 단순히 ADC 값만 읽는 것이 아니라, SYS_GetBatteryLevel()로 현재 보드의 VDDA(전원 전압)를 실시간으로 측정한 뒤, 이를 이용해 LM35 센서의 출력 전압을 보정하고 섭씨 온도로 변환하는 과정을 코드와 함께 살펴본다. 실습에서는 내부 ADC를 ADC 채널 0으로 설정하고, ADC_ReadChannels()로 읽어온 값을 바탕으로 아래와 같은 계산식을 사용해 온도를 구한다. temp = ((measuredLevel * Vdda) / 40950); 이때 40950라는 상수는 12비트 ADC 해상도(0..
이 코드는 STM32L0 NUCLEO 보드에서보드 부팅 시 UART로 “Hello World”를 PuTTY에 출력하고,진동 센서(또는 외부 인터럽트 입력)의 발생 횟수에 따라 LED를 점멸시키며,USER 버튼을 누르면 진동 카운트를 리셋하는 인터럽트 기반 동작을 구현한 예제다.단순히 GPIO를 토글하는 수준을 넘어서,UART 통신 초기화BSP(Basic Support Package)를 이용한 LED / 버튼 추상화EXTI 인터럽트 콜백 활용까지 한 번에 연습하는 코드라고 보면 된다. 먼저 CubeMX에서 다음과 같이 PA2와 PA3을 각각 USART2_TX, RX로 설정해준다. /* USER CODE BEGIN Header *//** ************************************..
기존에는 GPIO 레지스터를 직접 제어하는 방식(Bare-Metal)으로 LED Blinking을 구현해보았다.https://xeungcoding.tistory.com/64 [STM32] GPIO 레지스터 직접 제어 – LED Blinking이번 실습에서는 STM32 MCU 기반 개발 보드인 Nucleo-L073RZ를 사용하여 GPIO 레지스터를 직접 제어하는 방식(Bare-Metal)으로 LED Blinking을 구현하였다.HAL 라이브러리나 CubeMX와 같은 고수준 추상화 도구를xeungcoding.tistory.com 이번 글에서는 해당 방식을 확장하여,HAL(Hardware Abstraction Layer) 기반의 GPIO 제어 방식으로 LED Blinking을 구현해보고자 한다.STM32에서 ..
임베디드 시스템은 가전제품, 자동차, 로봇, 의료기기 등 특정 목적의 기기 내부에 마이크로컨트롤러(MCU)와 소프트웨어를 내장하여 동작하는 전용 컴퓨터 시스템이다.범용 컴퓨터와 달리 미리 정해진 기능만 수행하며, 제한된 자원 환경에서 안정적이고 실시간으로 동작해야 한다는 특징을 가진다. 임베디드 시스템은 하드웨어와 소프트웨어가 밀접하게 결합된 구조를 가지며, 이를 제어하는 펌웨어(Firmware)는 하드웨어의 특성을 직접 다루는 핵심 요소이다.따라서 임베디드 개발자는 단순한 소프트웨어 개발자가 아니라, 하드웨어 특성을 이해하고 제어할 수 있는 펌웨어 개발자라고 볼 수 있다. 시스템 구성 측면에서는 입력 센서, 메인 프로세서, 출력 액추에이터로 이루어진 구조를 가지며,MCU는 CPU, 메모리, 각종 인터페..
이번 실습에서는 STM32 MCU 기반 개발 보드인 Nucleo-L073RZ를 사용하여 GPIO 레지스터를 직접 제어하는 방식(Bare-Metal)으로 LED Blinking을 구현하였다.HAL 라이브러리나 CubeMX와 같은 고수준 추상화 도구를 사용하지 않고, 메모리 맵에 정의된 레지스터 주소에 직접 접근하여 GPIO 클럭 활성화, 핀 모드 설정(Output), 출력 데이터 제어(ODR)를 순차적으로 구성하였다.특히 PA5 핀을 출력(GPIO Output)으로 설정한 뒤, ODR 레지스터에 대한 XOR 연산을 이용한 토글 방식과 busy-wait 기반 delay 함수를 사용하여 LED가 주기적으로 깜빡이도록 구현하였다. 본 실습을 통해 아래를 직접 코드로 확인할 수 있었다.STM32가 32비트 MCU..