본문 바로가기

cortex19

13. [STM32] Interrupt-Register 이번장에서는 인터럽트에 관련된 레지스터에 관해 살펴보자.순서는 인터럽트가 초기화 되는 순서대로 볼 것이다.이 순서는 MX_GPIO_Init()함수에서 각 핀별로 호출되는 HAL_GPIO_Init()함수와 HAL_NVIC_SetPriority(), HAL_NVIC_EnableIRQ()에 구현된 순서이다. HAL_GPIO_Init()에서 사용되는 레지스터의 경우 '1. 레지스터 초기화(GPIO설정)'에서 나머지는 '2. Control 레지스터 초기화'에서 설명한다. 1. 레지스터 초기화(GPIO 설정)인터럽트 초기화 설정은 CubeMX의 설정 따라 MX_GPIO_Init()에서 설정되고 각 핀별로 HAL_GPIO_Init()을 통해 초기화 된다.HAL_GPIO_Init()함수의 GPIO설정 부분은 GPIO .. 2024. 9. 26.
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.
8. [STM32] GPIO - Peripheral Register 2 앞장에서 HAL Library의 소스를 통해 GPIO의 레지스터를 살펴보았다.이번장에서는 앞에서 살펴보지 않은 GPIO초기화 관련 내용들을 살펴보자.  본 블로그는 STM32를 소프트웨어 엔지니어 관점에서 바라본 블로그입니다. 따라서 회로등의 전자공학 관련 내용은 사실과 다를 수 있습니다. 본 블로그에서 사용된 MCU 및 개발보드는 다음과 같습니다. NUCLEO-F429ZI (STM32F429ZIT LQFP144) NUCLEO-F439ZI (STM32F439ZIT LQFP144) " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스  1. GPIO 초기화 함수GPIO의 초기화 함수는 main함수에서 .. 2024. 8. 13.
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.