ADC의 Conversion 시간은 회로 설계 뿐 아니라 소프트웨어 구현시 중요한 요소입니다. 특히 빠른 응답이 필요로하는 어플리케이션에서는 이 변환시간에 대해 좀 더 주의를 해야합니다. 너무 짧게 설정하여 정확하지 않은 결과값을 가지지 않도록 해야하며, 너무 길게 설정하여 어플리케이션 수행에 장애가 되지 않도록 하여야합니다. 그림1. STM32는 SAR 방식의 ADC 가 내장되어 있습니다. STM32는 SAR 방식의 AD Conversion Controller를 가지고 있으며 이 방식은 대표적으로 가격 대비 좋은 성능을 가진 방식입니다. 위의 그림1에서 볼 수 있듯이 여러개(합계:2C)의 Capacitor 을 가지고 있으며 이 Capacitor를 충전한 후 각 Capacitor를 설정한 비트 수 만큼 ..
이번 포스트에서는 STM32의 SPI(Serial peripheral interface) 회로 리뷰 방법을 알아보도록 하겠습니다. SPI는 비교적 간단한 회로로 구성할 수 있으며, 다른 통신에 비해 Noise에 강한 편입니다. 또한 동기(Synchronous) 통신이기에 에러율이 없다는 장점이 있습니다. SPI는 다음과 같은 핀으로 구성됩니다. MISO: Master In / Slave Out data. MOSI: Master Out / Slave In data. SCK: Serial Clock output. NSS: Slave select pin. 통신을 위한 개별 Slave 장치 선택 데이터 프레임을 동기화하거나 여러 Master 간의 충돌 감지 SPI는 통신 방법에 따라 회로의 연결이 달라지..
Template method(템플릿 메소드) 디자인 패턴도 매우 유용한 패턴입니다. 기능은 같으나 구현방법이 다른 메소드들의 구조를 제시하고 기능과 구현방법이 같은 메소드는 대표로 하나만 제시되는 방법입니다. 예를 들어 도형을 그리는 것을 생각해보도록 하겠습니다. 도형에는 삼각형, 사각형, 원 등이 있습니다. 넓이와 높이(원의 경우 지름)을 통해 도형을 설정하는 것은 모두 똑같습니다. 그러나 구체적으로 모양은 다 다릅니다. 도형을 그릴 때 메모리라는 사상위에 비트를 역상시켜 해당 도형을 그리는 방법을 사용하는데 이는 어느 도형이나 이미지를 그리든 동일합니다. 따라서 도형의 모양을 만드는 기능은 개별 구현이 가능하도록 추상 메소드로 하고 그리는 부분은 모두 같으므로 하나만 구현하면 됩니다. 설명이 약간 어..
안녕하세요? Serial 통신 PC 프로그램 자주 사용하시나요? STM32 개발할 때 무료로 자주 사용되는 STM32CubeIDE Terminal Console 기능에 대해 알아보겠습니다. 물론 무료툴로 TeraTerm, Putty 등이 더 많은 기능을 가지고 있지만 간단히 Serial 통신을 확인 할 때 STM32CubeIDE Console view에서 지원하는 Serial Terminal을 사용할 수도 있습니다. 1. STM32CubeIDE 켜고 > Window > Show View > General > Console 을 체크하면 아래와 같은 View가 생깁니다. 오른쪽 위의 빨간 부분을 클릭 > Command Shell Console 을 클릭하면 아래와 같은 인터페이스 설정창이 뜨게됩니다. 2. C..
대표적인 비동기 Serial 통신 중에 하나인 UART(USART) 통신 Interface의 회로 리뷰를 해보도록 하겠습니다. 위는 STM32G4 시리즈의 USART 블럭도 입니다. 총 5개의 Output이 나와 있습니다. 각 핀에 대한 설명은 데이터시트를 참조하였습니다. • RX(데이터 입력 수신) RX는 직렬 데이터 입력입니다. 데이터 복구를 위해 오버샘플링 기술이 사용됩니다. 유효한 수신 데이터와 노이즈를 구별합니다. • TX(데이터 출력 전송) 트랜스미터가 비활성화되면 출력 핀이 I/O 포트 구성으로 돌아갑니다. 송신기가 활성화되고 데이터를 전송할 필요가 없을 때 TX 핀은 High(Idle High)입니다. 단일 와이어 및 스마트 카드 모드에서 이 I/O는 데이터를 전송 및 수신하는 데 ..
자료구조를 다룰때 많이 사용되는 Iterator 패턴을 살펴보도록 하겠습니다. 보시다시피 8bit 자료형을 취급하는 iterator입니다. setup_iterator은 커스텀되어있는 자료형과 연결하는 함수입니다. 즉, 사용자가 만든 자료형과 인터페이스와 연결하는 부분입니다. /* iterator.h */typedef struct{ void (*init)(void); bool (*set_value)(uint8_t value); bool (*get_first_value)(uint8_t re_value); bool (*get_next_value)(uint8_t re_value); bool (*has_next)(void); uint8_t *(*get_current_buffer)(void);}iterator_t;..
이번장에서는 프로그램 전체적으로 한개의 자원을 사용하는 경우 적용할 수 있는 디자인 패턴 Singleton 패턴에 대해 알아보겠습니다. 예를 들면 GPS, G sensor, 온도센서와 같은 모듈은 보통 한개의 제품에 한개씩 들어있습니다. 각각의 모듈을 초기화하고 사용하는 C 언어 Class를 만든다면 다음과 같이 Singleton을 활용할 수 있습니다. #define null (void *)0 typedef struct { init_function_t init; open_function_t open; connect_function_t connection; //... (필요시 추가) }device_t; device_t *get_gps_instance() { static device_t *instance =..
Observer 패턴은 정말 많이 사용하는 디자인 패턴입니다. 자바 프레임워크에서도 쉽게 찾아 볼 수 있는데 흔히 Java C#에서 사용되는 Event Listener 들이 이 종류에 속합니다. 이번 장에서 만들 Observer pattern 예제에는 아래의 요소가 필요합니다. observer_t : 관찰자 구조체 calculate_temperature : 온도 측정 실행함수 display_degree_handler : 화면에 측정된 온도를 표시하는 함수 file_write_degree_handler : 파일에 측정된 온도를 기록하는 함수 우선 헤더를 보겠습니다. /* header.h */ typedef void (*observer_handler_t)(uint32_t degree, uint32_t par..