전체 글 304

CH341 칩을 이용해서 UART,I2C,SPI 통신하기 4편(회로도,아트웍)

안녕하세요. 1~3편에서는 C#을 이용해서 UART, I2C, SPI가 가능한 프로그램을 만들었습니다.이번에는 KICAD 툴을 이용해서 회로도작성과 아트웍을 해보겠습니다.기본적인 회로도는 아래의 사이트를 참고하였습니다.https://www.onetransistor.eu/2017/08/ch341a-mini-programmer-schematic.html*회로도POWER CHECK LED : USB가 연결해있는지 안해있는지 확인하는 부분입니다.LDO : VBUS(5V)로부터 3.3V를 만드는 부분 입니다. USB CONNECTOR : USB 커넥터 (USB B type 사용)CLOCK : 외부클럭 입니다. USER PIN(SPI, I2C, UART, POWER) : 통신을 위한 외부핀 입니다. USER SWI..

각종 CHIP/CH341 2025.05.18

KICAD 사용하기 1편(회로도,PCB 레이아웃 그리기)

안녕하세요. 오늘은 KICAD에 대해 알아보겠습니다.KICAD는 회로도 작성과 아트워크를 할 수 있는 무료 툴입니다. KICAD를 사용하면 간단하게 보드를 만들 수 있습니다.비슷한 툴로는 PADS가있는데 PADS 유료입니다.*툴 다운로드하기KICAD 다운로드는 아래의 사이트에서 합니다.https://www.kicad.org/download/ * 사용하기1. 프로젝트 생성새 프로젝트를 클릭하여 프로젝트를 생성합니다.프로젝트를 생성하면 .kicad_sch, .kicad_pcb 두 파일이 생성됩니다..kicad_sch는 회로도 파일이고 .kicad_pcb파일은 pcb 레이아웃 파일입니다.참고로 PADS에서 회로도는 Logic이라고 부르고 pcb 레이아웃은 명칭이 같습니다.2. 회로도 그리기우선 회로도를 그리기..

회로이론/KICAD 2025.05.17

STM32 링커스크립트에대해 알아보기

안녕하세요. 오늘은 STM32 링커스크립트에대해 알아보겠습니다.*링커스크립트링커 스크립트(Linker script)는 다른 표현으로는 링커 디스크립션(Linker Description)이라고 합니다. 링커란 여러 개의 오브젝트파일을 모아서 실행파일로 만드는 프로그램을 의미합니다. 예를들어 main.c 파일과 led.c 파일이 있다고하면 컴파일하면 main.o와 led.o가 나옵니다. 각 코드에서 사용한 변수와 함수들의 위치를 정해주는게 링커입니다.STM32 프로젝트를 만들면 .ld 파일이 함께 생성되는데 해당파일이 링커스크립트입니다.실제 링커스크립트에있는 내용을 살펴보겠습니다..사용할 MCU는 STM32F103C8입니다.아래의 사진은 데이터시트에 있는 Memory Map입니다.Flash memory의 주..

STM32/이론 2025.05.16

MCU에서 Micro SD카드 사용하기 2편 (MicroSD SPI 프로토콜)

안녕하세요. 오늘은 Micro SD카드 SPI 프로토콜에 대해 알아보겠습니다.SPI, SD Mode 방식이 있고 해당 글에서는 SPI모드를 사용할 예정입니다. 아래의 사이트에서 프로토콜에 대한 내용을 확인 할 수 있습니다. (Physical Layer Simplified Specification)https://www.sdcard.org/downloads/pls/*SPI MODE 설정1. CPOL : 클럭이 Idel 상태일때 Low (0)2. CPHA : 첫 번째 엣지에서 데이터 샘플링 (0)3. Significant Bit : MSB4. Enable Line : Low5. 클럭속도1) 초기화 클럭 주파수 : 100kHz~400kHz(권장)2) 초기화 완료 후 데이터 전송 단계 : 25MHz(최대)*패킷해..

각종 CHIP 2025.05.12

MCU에서 Micro SD카드 사용하기 1편 (MicroSD Card Adapter 알아보기)

안녕하세요. 오늘은 MCU에서 Micro SD카드를 사용할때 사용하는 모듈을 알아보겠습니다.우선 Micro SD 카드는 MCU 통신하는 프로토콜이 두가지입니다. MCU에서 어떤 통신을할지 선택할수있습니다. SPI, SD Mode 방식이 있고 해당 글에서는 SPI모드를 사용할 예정입니다.Micro SD카드는 같은데 각 프로토콜에서 사용하는 핀이 다릅니다. SPI를 사용하므로 CS, MOSI, VDD, SCLK, GND, MISO를 사용하게 됩니다.사진출처 : https://www.zeroalpha.com.au/services/data-recovery-blog/sd/sd-and-micro-sd-pinout-description-including-spi-protocolMicro SD카드는 동작전원이 3.3V입..

각종 CHIP 2025.05.07

CH341 칩을 이용해서 UART,I2C,SPI 통신하기 4편(SPI)

안녕하세요. CH341 칩을 이용해서 SPI통신을 해보겠습니다. 3편에서 했던 I2C랑 마찬가지로 CH341DLL을 사용합니다.* 하드웨어 구성CH341에서 SPI통신을 해야하므로 1,2번핀을 연결합니다. 1,2번핀을 연결했을때랑 2,3번핀을 연결했을때 다르게 잡히는걸 확인할수있습니다. * 프로그램 구성SPI 파형을 보기위해 아날라이저를 연결합니다. * CH341 통신 연결하기OpenDevice()함수를 이용해서 연결시도를 합니다. 연결이 되었으면 true가 리턴되고 실패했으면 false가 리턴됩니다. timer도구를 이용해서 1초에한번씩 OpenDevice()를 호출하고 성공/실패에 따라 UI로 표시해줍니다. * SPI 비트전송순서비트전송순서를 정할수있습니다SetStream()함수를 이용하면 LSB/M..

각종 CHIP/CH341 2025.05.05

MCU-채터링현상 알아보기기

안녕하세요. 오늘은 채터링(chattering) 현상에 대해 알아보겠습니다.채터링현상은 기계적 버튼이 눌리거나 떼어졌을때, 신호가 빠르게 여러번 튕기거나 흔들리는 현상을 의미합니다.채터링의 원인은 접점의 마모나 전기적인 노이즈 등 다양한 원인이 있습니다.이러한 현상을 막기위해 디바운싱(Debouncing)방법을 사용하게 됩니다.우선 채터링현상은 버튼을 사용할때 많이 경험하므로 버튼이 어떻게 동작하는지 알아보겠습니다.아래의 그림을보면 버튼을 눌렀을때 동그란 금속재질이 움직여서 버튼의 회로가 연결되게 해줍니다.채터링현상을 직접 확인해보겠습니다.회로는 아래처럼 구성했습니다. INPUT PORT는 실제로 아무것도 연결이 되어있지 않고, 풀업저항을 사용하는 모습으로 구성했습니다.point 부분을 측정하였고,  버..

지식/MCU지식 2025.03.02

STM32 RTOS 알아보기 6편(Mutex)

안녕하세요. 오늘은 세마포어와 뮤텍스에 대해 알아보겠습니다.(xSemaphoreCreateMutex,xSemaphoreTake,xSemaphoreGive)세마포어와 뮤텍스는 여러 태스크가 공유 자원에 안전하게 접근하도록 동기화하기 위해서 사용합니다.이 글에서는 세마포어와 뮤텍스를 알기전에 알아야 할 지식을 알아보고 뮤텍스에대해 알아보겠습니다.예를들어 아래의 코드에서 global_i는 TASK1과 TASK2가 동시에 접근하는 공유자원입니다.이런경우 임계구역(Critical Section)이 발생하고, 레이스컨디션(Race Condition)문제가 발생할 수 있습니다.void task(void *pvParameters);int global_i=0;void myTask(){  xTaskCreate(task, ..

STM32/STM32_RTOS 2025.02.16

STM32 RTOS 알아보기 5편(portYIELD_FROM_ISR)

안녕하세요. 오늘은 RTOS에서 사용하는 portYIELD_FROM_ISR에 대해 알아보겠습니다.제가 업로드했던 글 기준으로  3편에서 portYIELD_FROM_ISR 함수를  사용했었습니다.portYIELD_FROM_ISR 는 ISR종료 후 즉시 태스크 전환이 필요한 경우 Context Switching을 수행하게 해줍니다.port : FreeRTOS가 다양한 하드웨어에서 동작할 수 있도록 CPU별 맞춤 구현을 제공하는 하드웨어 적응 계층입니다.YIELD : (양보하다) 현재 실행중인 태스크가 CPU실행을 포기하고 다른 태스크에게 실행을 양보합니다.FROM_ISR : 해당기능(매크로 또는 함수)이 ISR에서 호출될 수 있음을 의미합니다.portYIELD_FROM_ISR의 코드를 보겠습니다. 매크로로 ..

STM32/STM32_RTOS 2025.02.01

STM32 RTOS 알아보기 4편(xTimerCreate,xTimerStart,xTimerStop)

안녕하세요. 오늘은 RTOS에서 사용하는 타이머를 알아보겠습니다.우선 이전글에서는 인터페이스를 CMSIS_V1로 사용했었는데 해당버전을 사용하면 타이머를 사용할때 다른코드를 추가해줘야하는게 있으므로 CMSIS_V2로 변경해서 사용하겠습니다.CMSIS_V2버전으로 바꾸고 빌드할때 freertos_mpool.h: no such file or directory와같은 에러가 나올수도 있는데 F103기준으로 펌웨어패키지 버전을 STM32Cube FW_F1 V1.8.5로 바꾸니 빌드가 됐습니다.* xTimerCreate함수TimerHandle_t xTimerCreate(const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseT..

STM32/STM32_RTOS 2025.01.28