[STM32] 10. UART, USART 동작 원리 설명
·
🧊 STM32
UART/USART 설명📌 1. UART (Universal Asynchronous Receiver/Transmitter) 란?UART는 Universal Asynchronous Receiver/Transmitter의 약자로, 직렬 통신을 위한 하드웨어 프로토콜이다. UART는 데이터를 두 개의 핀, 송신(Tx)과 수신(Rx)을 통해 비동기적으로 전송한다. 비동기식 통신이란 송신 측과 수신 측 간의 동기화를 위해 별도의 클럭 신호가 필요하지 않은 통신 방식을 의미한다. 보통 기본 C언어에서 printf를 구현할 때 많이들 소개하므로 기본적인 동작을 알아두면 좋다.📌 2. UART의 기본 작동 원리비동기 통신: 별도의 클럭 신호 없이 송신기와 수신기가 동일한 전송 속도(baud rate)로 설정되어야 ..
[STM32] 9. Volatile 키워드
·
🧊 STM32
Volatile 키워드C 언어에서 volatile 키워드는 임베디드 소프트웨어 개발에서 중요한 역할을 한다. 이 키워드는 변수가 최적화 과정에서 컴파일러에 의해 수정되지 않도록 보장하며, 프로그램의 실행 도중에 변수의 값이 예상치 못하게 변경될 수 있다는 것을 컴파일러에 알린다. 이러한 변경은 외부 이벤트나 하드웨어 등에 의해 발생할 수 있다.C 언어에서 volatile 키워드는 임베디드 소프트웨어 개발에서 중요한 역할을 한다. 이 키워드는 변수가 최적화 과정에서 컴파일러에 의해 수정되지 않도록 보장하며, 프로그램의 실행 도중에 변수의 값이 예상치 못하게 변경될 수 있다는 것을 컴파일러에 알린다. 이러한 변경은 외부 이벤트나 하드웨어 등에 의해 발생할 수 있다.📌 1. volatile의 중요성메모리 맵..
1. UDS(통합 진단 서비스) 소개
·
🚘 자동차 SW/🛠️ 차량 UDS 진단
UDS(Unified Diagnostic Services) : 통합 진단 서비스UDS(Unified Diagnostic Services)는 차량의 전장 소프트웨어(ECU 소프트웨어) 개발 및 유지보수에서 매우 중요한 역할을 한다. 전장 SW 개발에서 UDS의 역할은 다음과 같다.⚙️ 1. UDS 소개현재 자동차들은 아래 사진과 같이 다양한 ECU(Electronic Cotrol Unit)들로 차량 곳곳에 도배가 되어 있다. ECU가 늘어날수록 전장(전자 장비) 회사도 다양해지며, 각 부품마다 제조하는 회사가 달라 규격이 서로 달랐다. 각 부품을 모아 자동차를 조립하기 때문에 같은 규격으로 개발할 필요가 있었다. Unified Diagnostic Services (UDS : 통합 진단 서비스)는 차량 내 ..
[STM32] 8. 스위치 채터링 (소프트웨어 디바운싱)
·
🧊 STM32
스위치 채터링푸쉬 리턴 스위치를 누를 때 발생할 수 있는 노이즈나 불안정한 신호로 인해 스위치가 여러 번 눌렸다고 인식되는 현상을 "채터링" 또는 "디바운싱" 문제라고 한다. 이를 해결하기 위해 디바운싱 필터링을 적용해야 한다. 디바운싱을 효과적으로 처리하는 방법에는 하드웨어적 방법과 소프트웨어적 방법이 있다. 이번 포스팅은 소프트웨어 디바운싱을 통해 채터링 문제를 해결 방법을 소개하려 한다. 소프트웨어 디바운싱은 코드로 디바운싱을 구현하는 방법아다. 주로 타이머를 이용하여 일정 시간 동안 신호가 안정적인지 확인하는 방식으로 처리한다.🔗 1. 코드/* USER CODE BEGIN PTD */#define DEBOUNCE_DELAY 30 /* 30ms *//* USER CODE END PTD */.../..
[STM32] 7. 외부 인터럽트(External Interrupt)
·
🧊 STM32
외부 인터럽트외부 인터럽트는 마이크로컨트롤러가 외부 신호(예: 버튼 입력, 센서 신호 등)에 의해 프로그램의 흐름을 중단하고, 특정 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)을 실행하도록 하는 메커니즘이다. STM32 마이크로컨트롤러에서도 이러한 외부 인터럽트를 효과적으로 사용할 수 있다.📌 1. 외부 인터럽트 란?외부 인터럽트는 마이크로컨트롤러의 특정 핀으로 들어오는 신호를 감지하여 발생하는 인터럽트이다. 이러한 인터럽트는 다음과 같은 경우에 유용하다.버튼 누름 감지센서의 신호 변화 감지외부 장치와의 통신 신호 감지외부 인터럽트는 일반적으로 다음과 같은 방식으로 설정되고 사용된다.인터럽트 소스 설정: 특정 GPIO 핀을 인터럽트 소스로 설정한다.인터럽트 모드 설정:..
[STM32] 6. 풀업 저항 기본 원리
·
🧊 STM32
풀업 저항 (Pull-Up)풀업 저항은 디지털 회로에서 입력 핀의 기본 상태를 높은 전압(논리적 '1')으로 설정하기 위해 사용된다. 풀업 저항이 없으면 입력 핀이 떠다니는 상태(floating)가 되어 예기치 않은 전압 값을 가질 수 있다. 풀업 저항을 사용하면 입력 핀이 안정된 높은 전압 상태를 유지하게 된다.📌 1. 풀업 저항의 역할기본 상태 유지: 풀업 저항은 입력 핀이 아무 신호도 받지 않을 때 기본적으로 논리 '1' 상태(높은 전압)를 유지하도록 한다.안정성 향상: 회로의 안정성을 높여, 입력 핀이 불안정한 상태(플로팅 현상)에서 예기치 않은 동작을 방지한다.풀업 저항(R): 저항이 INPUT 핀과 Vcc(+5V) 사이에 연결된다.스위치: 스위치가 닫히면 INPUT 핀은 GND와 연결되어 논..
[STM32] 5. 내장 스위치 제어
·
🧊 STM32
STM32 내장 스위치 제어이번 포스팅은 STM32 보드에 있는 내장 스위치의 기능을 설명하고, 스위치 입력을 받아 처리하는 간단한 프로젝트를 포함한다. 하기 이미지와 같이 Arduino UNO, ATMega328P, STM32 Board 등 대부분의 개발 보드들은 테스트를 해볼 수 있게끔 스위치를 내장하고 있다. 다음 포스팅에 소개할 예정이지만 이런 보드들의 스위치들은 풀업 저항 회로로 구성되어 있다. 풀업 저항은 전원단에 저항이 있는 회로로 노이즈에 강하다는 장점을 가지고 있으며 대부분의 양산 제품들이 이 회로를 사용하고 있다.📌 1. STM32 내장 스위치스위치의 역할: 스위치는 사용자가 전자 장치에 명령을 내릴 수 있는 간단하고 직관적인 인터페이스를 제공한다.물리적 구성: 대부분의 STM32 보..
[C/C++ Tip] 30. C언어 Unit Test 종류
·
🔷 C언어 30강
단위 테스트 종류위 테스트의 각 유형을 좀 더 상세하게 설명하고, 각 유형이 어떤 문제를 잡기 위해 사용되는지, 그리고 각각에 대한 깔끔한 코드 예제를 제공하겠다. 여기서는 간단한 함수를 사용하여 여러 단위 테스트에 대해 설명한다.⭐ 1. 대상 함수// calculateDiscount 함수는 구매 금액(amount)에 따라 할인율을 적용함.// 100 이상일 때는 10% 할인, 50 이상 100 미만일 때는 5% 할인, 그 외에는 할인 없음.double calculateDiscount(double amount) { if (amount >= 100) return amount * 0.9; else if (amount >= 50) return amount * 0.95; else return a..
[C/C++ Tip] 29. C언어 Unit Test
·
🔷 C언어 30강
Unit TestC언어에서 단위 테스트(Unit Test)를 구현하는 방법 중 하나는 간단한 함수와 함께 assert 매크로를 사용하는 것이다. assert 매크로는 조건이 참이 아닐 경우 프로그램을 종료시키므로, 예상된 결과가 실제 결과와 일치하는지 검증하는 데 유용하다. 더 복잡한 테스트 요구 사항이 있는 경우, C언어용 테스트 프레임워크(예: CUnit, Unity, CMocka 등)를 사용할 수 있다. 여기에는 간단한 add 함수와 이 함수에 대한 단위 테스트 예제가 포함되어 있다. 이 예제는 assert를 사용하여 구현된다. asset 함수를 사용하기 위해선 assert.h를 include 해야 한다.#include #include // 간단한 덧셈 함수 정의int add(int a, int b..
[C/C++ Tip] 28. C언어 포인터의 다양한 표현들
·
🔷 C언어 30강
포인터의 다양한 표현C언어의 포인터를 이해하고 활용하는 것은 처음 접하는 사람들에게 다소 어려울 수 있는데, 그 중 하나의 원인은 여러가지 다양한 표현법 때문이다. 특히, 같은 메모리 주소를 가리키는 다양한 방법이 존재하는데, 이는 때로는 혼란을 줄 수 있다. 여기 몇 가지 대표적인 예시를 들어본다.⭐ 1. 배열의 첫 번째 요소의 주소int A[10];표현법 1: A​배열의 이름만 사용하면, 배열의 첫 번째 요소의 주소를 나타낸다.표현법 2: &A[0]배열의 첫 번째 요소의 주소를 명시적으로 나타낸다.⭐ 2. 함수 포인터int func(int x) { return x * 2;}표현법 1: ​func함수 이름만을 사용하여 해당 함수의 주소를 나타낸다.표현법 2: &func함수의 주소를 명시적으로 나타내기..
18진수
'분류 전체보기' 카테고리의 글 목록 (3 Page)