본문 바로가기

ARM18

12. [STM32] Interrupt 개요 인터럽트란 사전전 의미 그대로 방해하는 행위를 말한다.즉, MCU가 일을 계속 하고 있는 도중 어떤 이벤트가 발생해서 MCU에게 잠시 실행을 중지하고 이것부터 우선적으로 처리하도록 하는 방식이 인터럽트이다.이 인터럽트에는 ARM에서 정해놓은 중요 인터럽트 이외에도 사용자가 직접 정의해서 사용할 수 있는 인터럽트도 있다.Hello World나 Entry Point등의 이전 장들에서도 언급을 했었는데 이번장에서 자세히 알아보도록 하자.이전 장들 특히 Entry Point에서 언급한 Interrupt Vector Table등의 내용들과 병행해서 보는게 이해가 빠를 수 있다.  본 블로그는 STM32를 소프트웨어 엔지니어 관점에서 바라본 블로그입니다. 따라서 회로등의 전자공학 관련 내용은.. 2024. 9. 26.
11. [STM32] SWV/ITM 을 사용한 디버깅 CubeIDE의 디버깅 기능을 사용하면 실시간으로 특정 변수의 값을 관찰할 수 있다. 하지만 이 방법은 코드 한줄한줄 단계별로 실행해야 하므로 변화되는 연속적인 값을 봐야 하는등 시간적 값의 변화 관찰에는 적합하지 않다.이런 상황에서는 보통 UART를 이용해 값을 전송해서 확인하는 방법을 사용 할 수 있는데 이번장에서는 UART를 사용하지 않고 CubeIDE의 출력창에 printf를 사용해 문자열을 그대로 표시하는 방법을 설명하고자 한다. 1. 설정SWV(Serial Wire Viewer)/ITM(Instrumentaion Trace Macrocell) 은 위에 기술한대로 printf등의 문자열 출력 함수로 CubeIDE의 콘솔화면에 문자를 표시하는 기능이다.단, 이 기능은 ARM Cortex-M3/M4.. 2024. 9. 23.
10. [STM32] GPIO예제(feat. Open Drain) 이번장에서는 GPIO의 단순 bit I/O기능을 이용한 실습을 해보자.LED를 켜고 끄는 예제인데 단순히 껐다, 켰다하는건 이전장에서 많이 해봤으므로 여기서는 여러개의 LED를 배열해 좌우로 왔다갔다 하도록 만들것이다.이때 출력 방식은 앞의 장에서는 설명하지 않았던 Open Drain방식을 사용한다.  본 블로그는 STM32를 소프트웨어 엔지니어 관점에서 바라본 블로그입니다. 따라서 회로등의 전자공학 관련 내용은 사실과 다를 수 있습니다. 본 블로그에서 사용된 MCU 및 개발보드는 다음과 같습니다. NUCLEO-F429ZI (STM32F429ZIT LQFP144) NUCLEO-F439ZI (STM32F439ZIT LQFP144) .. 2024. 9. 23.
7. [STM32] GPIO - Peripheral Register 1 이번 시간에는 앞에서 만든 GPIOTest 프로젝트에서 사용된 HAL Library 의 소스를 살펴볼 것이다.사실 소스를 보면 대부분의 루틴은 Peripheral Register를 엑세스하는 일이다. 따라서 이번장에서는 HAL Library의 내부 코딩을 살펴보는 것이지만 실제로는 GPIO의 레지스터의 구성을 알아보는 것이다.단순히 라이브러리로 제공되는 함수만 기계적으로 쓸게 아니라 내부가 어떻게 구성되어 있는지 보는것도 의미가 있을 것이다. 다행히 대부분의 소스는 우리가 확인할 수 있다.  본 블로그는 STM32를 소프트웨어 엔지니어 관점에서 바라본 블로그입니다. 따라서 회로등의 전자공학 관련 내용은 사실과 다를 수 있습니다. 본 블로그에서 사용된 MCU 및 개발보드는 다음.. 2024. 7. 26.
6. [STM32] GPIO 기초 이번 시간에는 일반적인 GPIO의 Bit I/O기능을 구현해 보자.사실 앞서 만든 Hello World에서 이 기능은 이미 살펴봤으나 이번장에서 다시 한번 정리하고 이 소스로 다음장에서 HAL Library를 뜯어보도록 하겠다.  본 블로그는 STM32를 소프트웨어 엔지니어 관점에서 바라본 블로그입니다. 따라서 회로등의 전자공학 관련 내용은 사실과 다를 수 있습니다. 본 블로그에서 사용된 MCU 및 개발보드는 다음과 같습니다. NUCLEO-F429ZI (STM32F429ZIT LQFP144) NUCLEO-F439ZI (STM32F439ZIT LQFP144) " data-ke-type="html">HTML 삽입미리보기할 수 .. 2024. 7. 25.
5. [STM32] NUCLEO F429/439 보드 Pinmap 우리가 사용하는 NUCLEO F429/439 보드의 핀맵이다. 원본 문서는 다음 링크를 확인하자.        * 왼쪽 4번째 핀번호가 잘 안보이는데 PB_12이다. * CN11/CN12는 CN7~10과 중복된 핀도 존재한다. 2024. 7. 22.
4. [STM32] Entry Point Entry Point(진입점)은 프로그램이 최초 실행될 때 제일 처음 실행되는 위치를 의미한다.우리는 C/C++로 프로그램을 만들고 있고 C/C++의 Entry Point는 main함수이다.이 장에서 설명할 건 사실 C/C++의 Entry Point가 아니고 MCU가 어떻게 main함수를 호출하는가 즉, main함수 호출 직전까지의 Booting Sequence이다. MCU/CPU등의 프로세서 동작 방식을 이해하는데 도움이 될 거 같아서 이 장을 마련했다.STM32를 라이트하게 배우는 사람들은 이 장의 내용이 조금 어려울 수 있다. 이런 내용에 관심이 없다면 건너 뛰어도 좋고 나중에 어느 정도 실력이 쌓인 후 봐도 좋다. 하지만 앞장에서 배운 디버거를 사용해 MCU의 동작방식을 익히는건 앞으로 STM32.. 2024. 7. 12.
3. [STM32] 디버깅 이번장에서는 디버거 사용법에 대해 설명하겠다.코딩을 하고 실행을 해보면 우리가 의도한 대로 실행되지 않는 경우가 많다. 이럴때는 소스를 한줄씩 실행해가면서 그 상황에서의 변수값이나 레지스터 값을 볼 수 있으면 버그를 빠르게 찾아 낼 수 있을 것이다.따라서 디버거 사용의 숙련도에 따라 개발 기간을 엄청나게 단축할 수 있으므로 디버거를 사용해 본 적이 없다면 본 장에서 확실히 익히기 바란다.   본 블로그는 STM32를 소프트웨어 엔지니어 관점에서 바라본 블로그입니다. 따라서 회로등의 전자공학 관련 내용은 사실과 다를 수 있습니다. 본 블로그에서 사용된 MCU 및 개발보드는 다음과 같습니다. NUCLEO-F429ZI (STM32F429ZIT LQFP144) .. 2024. 7. 12.