목록gpio (11)
승코딩당당당
이번 실습에서는 AUTOSAR OS 환경에서 Task를 생성하고, 이를 주기적으로 실행하여 LED를 제어하는 과정을 수행하였다. 단순히 while문으로 LED를 제어하는 것이 아니라, AUTOSAR의 Task와 Alarm 기반 스케줄링 구조를 활용하여 실시간 시스템에서의 동작 흐름을 이해하는 데 목적이 있다. 특히, OS 레벨에서 Task가 어떻게 생성되고 실행되는지, 그리고 해당 Task가 실제 하드웨어 제어로 이어지는 과정을 직접 구현해보며 AUTOSAR 구조에 대한 이해를 높일 수 있었다. 실습 환경보드: TRK-MPC560XBMCU: MPC5606B개발 환경: mobilgene C StudioAUTOSAR Classic Platform 기반실습 목표AUTOSAR OS Task 생성 및 설정Task..
이번 실습에서는 TC725 보드에서 GPIO를 이용해 4자리 FND(7-Segment) 디스플레이를 제어하는 카운터 시스템을 구현한다. 하드웨어 SPI 모듈을 사용하는 대신, SCLK·RCLK·DIO 핀을 직접 제어하는 비트뱅잉(Bit-Banging) 방식의 소프트웨어 SPI로 데이터를 전송하도록 구성하였다. 카운터 값은 0부터 9999까지 증가하며, 각 자리 숫자는 _LED_0F[] 배열을 통해 7-Segment 패턴으로 변환된다. 4자리 FND는 멀티플렉싱 방식으로 동작하며, send_port() 함수를 통해 자리 선택 신호와 세그먼트 데이터를 순차적으로 출력하여 사람이 보기에 동시에 켜진 것처럼 보이도록 구현하였다. 또한 두 개의 스위치를 이용해 동작을 제어한다.SW1 : 카운터 시작 / 정지 토글..
AURIX TC27x 보드에서 ERU(External Request Unit) 기반 인터럽트를 이용해 LED의 blinking을 제어하는 프로그램이다. 기본 동작은 while 루프에서 파란 LED(P10.2)와 빨간 LED(P10.1)를 P10_OMR 레지스터로 지속적으로 토글하여 깜빡이게 하고, 버튼(P02.0, P02.1)이 눌리면 인터럽트가 발생해 blinking을 멈추거나 다시 시작하도록 구성하였다. 인터럽트 서비스 루틴(ISR)에서는 LED를 직접 제어하지 않고, 전역 변수 g_blinkOn을 토글하여 현재 blinking 상태만 변경한다. 메인 루프는 이 플래그 값을 확인해 1일 때만 LED를 토글하고, 0이면 아무 동작도 하지 않는다. 이를 통해 인터럽트는 상태 제어, 메인은 실제 동작 수행..
이번 실습에서는 Infineon AURIX TC275와 Easy Module Shield v1을 이용해 하나의 ERU 모듈에서 두 개의 외부 인터럽트를 동시에 처리하는 Multi-interrupt 구성을 구현한다. P02.0과 P02.1에 연결된 두 개의 버튼을 각각 ERS2, ERS3로 매핑하고, 이를 통해 Blue LED(P10.2)와 Red LED(P10.1)의 상태를 독립적으로 토글하도록 설계했다.ERS2 → ERU0 → ISR0는 Blue LED 토글, ERS3 → ERU1 → ISR1은 Red LED 토글을 담당하며, 두 인터럽트 소스가 서로 간섭하지 않도록 SCU_EICR, SCU_IGCR, SRC_SCU_SCU_ERU0/1 레지스터를 각각 분리해서 설정하는 것이 핵심이다. 특히 ERS3 경..
이번 포스팅에서는 Infineon AURIX TC275와 Easy Module Shield v1 환경에서 버튼 입력을 이용해 파란색 LED를 제어하는 세 가지 방법을 정리한다.먼저 가장 기본적으로, 버튼을 누르면 Blue LED가 켜지도록 GPIO 레지스터 값을 직접 제어하는 방식부터 시작해서, ERU(External Request Unit)를 설정해 버튼에서 손을 떼는 순간(라이징 엣지)에 LED가 켜지도록 인터럽트로 동작을 바꾸는 실습을 진행한다. 마지막으로, P10_OMR 레지스터를 활용해 버튼을 누를 때마다 OMR 레즈스터를 이용해 Blue LED 상태가 토글되도록 구현하면서, 단순 ON/OFF 제어를 넘어 하드웨어가 제공하는 토글 기능을 어떻게 활용할 수 있는지도 함께 확인한다. 실습 과정에서는..
이번 실습에서는 Infineon AURIX 기반 보드에서 GPIO 레지스터를 직접 제어하여 입력 스위치 상태에 따라 LED를 제어하는 방법을 구현해본다. 포트 입력 레지스터(P02_IN)를 통해 스위치의 상태를 읽고, 출력 레지스터(P10_OUT)를 이용해 Red LED와 Blue LED를 각각 On/Off 하도록 구성한다. 또한 IOCR 레지스터를 설정하여 입력 핀과 출력 핀의 동작 모드를 지정하고, Watchdog 비활성화 및 CPU 동기화 과정까지 포함하여 실제 Bare-Metal 환경에서 동작하는 전체 흐름을 확인한다. 본 실습은 Infineon AURIX TC275 보드에 Easy Module Shield V1을 장착한 환경에서 진행하였다. Easy Module Shield의 사용자 스위치와 L..
마이크로컨트롤러에서 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)와 같은 레지스터를 기반으로 동작하며, 다양한 모드를 통해 시간 기반 제어와 신호 처리를 가능하게..
이 코드는 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, 메모리, 각종 인터페..