임베디드33 STM32 DWT 사이클 카운터로 코드 실행 시간 측정하기 'ARM Cortex-M 기반의 STM32 개발을 하다 보면, "내 코드가 얼마나 빠르게 실행될까?"라는 궁금증이 생길 때가 있습니다. 특히, 최적화를 고민할 때는 코드 블록 단위의 정밀한 실행 시간 측정이 필요하죠. 이때 사용할 수 있는 강력한 기능이 바로 DWT 사이클 카운터(Data Watchpoint and Trace Cycle Counter)입니다. 이 기능을 쓰면 코드 실행 시간을 '클럭 사이클 단위'로 측정할 수 있어 마이크로초 수준까지 정확한 분석이 가능합니다. 하지만 DWT는 기본적으로 꺼져 있기 때문에 직접 설정해 줘야 쓸 수 있습니다. 지금부터 한 줄씩 따라하면서 STM32에서 실행 시간을 측정하는 방법을 알아볼게요. 끝까지 읽으면 코드 성능을 분석하고 개선하는 데 어떤 식으로 이 기.. 2025. 4. 23. RS485 1:N 통신 오늘은 RS485 통신에서 1:N 통신을 구현하는 방법을 소개하려고 합니다.RS485는 여러 장치가 하나의 통신 라인을 공유하여 데이터를 주고받을 수 있어, 산업 현장이나 다양한 프로젝트에서 많이 사용되고 있어요.이번 글에서는 RS485로 마스터 장치 1개와 슬레이브 장치 2개가 통신하는 예제도 함께 알아보겠습니다.차근차근 따라와 주세요! RS485 통신이란? RS485는 여러 장치가 하나의 통신 선로를 공유하여 통신할 수 있도록 해주는 표준입니다.RS485는 차동 신호 방식을 사용해서 긴 거리에서도 신호가 안정적으로 전송되도록 하고, 1:N 통신을 통해 하나의 마스터가 여러 슬레이브와 데이터를 주고받을 수 있어요.마스터는 특정 슬레이브와만 데이터를 주고받도록 주소 체계를 사용해 통신합니다.1:N 통.. 2025. 4. 21. 디바운싱(Debouncing)이란? - 버튼 입력의 정확도를 높이는 핵심 개념 임베디드 시스템에서 가장 많이 사용하는 입력 장치 중 하나가 버튼(Switch)입니다.단순해 보이는 버튼 입력도 실제로는 노이즈와의 전쟁이라고 할 수 있는데요.그 이유는 바로 디바운싱(Debouncing) 때문입니다.디바운싱이란?디바운싱(Debouncing)은 버튼을 누르거나 뗄 때 발생하는 불필요한 신호의 변동, 즉 스위치 접점이 떨리는 현상(bounce)을 제거하는 처리 과정입니다.스위치를 누르면 단순히 한 번 눌리는 것 같지만, 전기적 신호는 매우 짧은 시간 동안 여러 번 ON/OFF를 반복하며 튕기듯 전달됩니다.이 상태에서 프로그램이 그대로 신호를 처리한다면, 버튼을 한 번 눌렀음에도 여러 번 눌린 것처럼 인식할 수 있죠.왜 디바운싱이 필요할까?정확한 입력 감지 : 여러 번 눌렸다고 인식되는 오류.. 2025. 4. 17. STM32CubeIDE에서 한글 주석 사용하는 방법 임베디드 개발을 하다 보면코드에 한글 주석을남겨야 할 일이 꽤 많습니다.특히 협업 시에는설명을 한글로 남겨두는 게훨씬 효율적이죠.그런데 STM32CubeIDE에서한글이 깨지거나 물음표로 보이거나,아예 빈칸으로 나오는 경험다들 한 번쯤은 해보셨을 겁니다.처음 STM32CubeIDE를 사용할 때,주석이 깨져서 엄청 당황했던기억이 납니다."왜 한글이 안 써지지?"하고 검색을 해도,정확한 해결 방법이 정리된 자료는많지 않더라고요.그래서 오늘은 STM32CubeIDE 환경에서한글 주석을 제대로 작성하고표시하는 방법을정리해보려고 합니다.IDE 내부 설정부터윈도우 시스템 환경변수까지,한 번 설정해 두면두고두고 편하게 쓸 수 있는 꿀팁이니꼭 따라 해 보세요!한글 주석이 깨지는 이유STM32CubeIDE는 기본적으로UT.. 2025. 4. 14. Hard Fault(하드 폴트) - 0으로 나누기 stm32 MCU에서 0으로 나누기를 시도하면 하드 폴트(Hard fault) 발생할 수 있음.하드 폴트는 프로그램이 비정상적인 동작을 할 때 발생하는 예외. 0으로 나누는 경우 하드 폴트가 발생하는 이유는 프로세서가 이러한 연산을 처리할 수 없기 때문.0으로 나누기와 같은 잘못된 연산을 감지하고 이를 처리할 방법이 없을 때 하드 폴트 발생. 0으로 나누기를 방지하는 방법 : 나눈셈을 수행하기 전에 분모가 0인지 확인. #include int divide(int numerator, int denominator) { if (denominator == 0) { // 분모가 0일 때 처리할 코드를 작성합니다. // 예를 들어, 에러 메시지를 출력하거나, 에러 코드를 반환할 수 있.. 2024. 5. 27. [STM32] multiple definition error [펌] https://blog.naver.com/kim1417/222748055449 STM32H7 LwIP 코드 생성 버그(?) #STM32H7 #CubeMX #CubeIDE #LwIP #Bug #errno #Multiple #Definition STM32H7에 대... blog.naver.com 출처 : 네이버 블로그 [카드한장] 2024. 3. 14. 이전 1 2 3 4 ··· 6 다음