전체 글 310

STM32 RTOS 알아보기 7편(Semaphore)

안녕하세요. 오늘은 세마포어에 대해 알아보겠습니다.세마포어는 여러 태스크나 인터럽트가 서로 순서를 지키거나, 정해진 개수만큼만 어떤 자원을 사용할 수 있게 해주는 장치입니다. RTOS에서는 이진 세마포어(Binary Semaphore), 카운팅 세마포어(Counting Semaphore) 두 가지 형태로 사용합니다.* 이진 세마포어 : 값이 0 또는 1만 가지며, 주로 태스크 동기화나 인터럽트에서 신호를 전달할 때 사용합니다.* 카운팅 세마포어 : 0 이상의 값을 가지며, 한정된 개수의 리소스(버퍼,큐 등)를 관리할 때 사용합니다.이전에 뮤텍스는 take, give를 한 태스크에서만 해야했는데 세마포어는 다른 태스크, 다른 인터럽트에서 take, give를 해도 됩니다.task에서 사용하는 이진세마포어,..

STM32/STM32_RTOS 2025.07.21

STM32로 USB to UART 모듈 만들기 6편(보드테스트,LED추가)

안녕하세요.오늘은 5편에서 만들었던 보드가와서 테스트를 해보겠습니다.(TX/RX LED 수정)테스트전에 우선 RX, TX할때 LED를 10ms 점멸하게 추가하겠습니다.RX,TX를 처리하는 함수로 진입하면 현재시간을 저장하고 LED를키고 flag를 ON합니다. 그리고 main문에서 해당 flag가 ON이면 LED가 켜져있는 시간을 확인해서 10ms가됐을때 LED를 OFF시킵니다.아래 코드를보면 RX를 처리하는 함수에서 들어온 데이터의 rx_data가 0x01~0x7f 범위일때만 led를 점멸시킵니다. 해당 조건을 넣은 이유는 rx핀을 손으로 만지면 노이즈로인해서 RX함수가 호출이 되어서 아스키코드값이 들어왔을때만 led가 점멸시키게 했습니다.void HAL_UART_RxCpltCallback(UART_..

STM32로 USB to UART 모듈 만들기 5편(회로도,아트웍)

안녕하세요. 오늘은 회로도와 아트웍을 제작해보겠습니다.회로도는 아래와 같습니다.회로도 기준으로 블럭별로 알아보겠습니다.* LDO(Low Dropout Regulator)- MCU에 전원을 주는 회로입니다. USB로 5V 전원을 받아서 3.3V로 변환해서 MCU에게 공급합니다. 캐패시터 C3,C4는 전원 안정화 용도입니다.* USB CONNECTORUSB CDC 통신을위한 회로입니다. USB B 커넥터를 사용합니다. 특이한점은 D+라인에 Pullup핀을 GPIO로 연결했습니다. MCU가 GPIO를 제어함으로써 PC에게 USB연결 또는 해제를 알릴 수 있기 때문입니다. 여기서는 MCU가 RESET할때 알려주게됩니다.*CLOCKSTM32F103시리즈는 내부크리스탈(8MHz)로도 USB통신을위한 CLOCK(48..

STM32로 USB to UART 모듈 만들기 4편(FW-라인스테이트)

안녕하세요. 오늘은 Terminal 프로그램을 연결/미연결했을때 구분하는법을 알아보겠습니다.사용하는 Terminal 프로그램은 Teraterm입니다.연결 시 , 미연결 시 아래와 같이 커맨드가 옵니다.차이점을보면 세번째 바이트가 연결 시 0x03, 미연결 시 0x02입니다.두번째 바이트의 0x22는 LINE STATE를 의미합니다.세번째 바이트의 0번째비트는 DTR, 1번째 비트는 RTS를 의미합니다.이 중에서 DTR이 연결/미연결을 알 수 있는 비트입니다.STM32에서 이 신호는 3편 라인코딩때와 마찬가지로 CDC_Control_FS함수에서 구분이 가능합니다.이때 pubf는 USBD_SetupReqTypedef의 주소를 가지고있어서 req->wValue를 하면 세번째 바이트를 얻을 수 있습니다. ..

STM32로 USB to UART 모듈 만들기 3편(FW-라인코딩)

안녕하세요.저번시간에는 USB to UART 할때 시리얼 통신설정을 고정으로 사용을 했었는데, 설정을 가변적으로해서 통신할수있게 해보겠습니다.USB CDC에서 사용하는 용어인 라인코딩(Line Coding)이있는데 해당단어의 의미는 USB CDC에서 사용하는 시리얼통신설정값을 의미합니다. 라인코딩은 baudrate, data bits, stop bits, parity가 있습니다.시리얼 통신 프로그램에서 Connect를 누르면, 라인코딩이 STM32로 전달됩니다.실제로 Connect를 했을때 어떤값이 STM32에게 가는지 확인해보겠습니다.시리얼 통신 프로그램은 Teraterm을 사용했고 USB to UART는 2편에서 만들었던 FW를 사용했습니다.위의 데이터는 아래의 데이터시트에서 확인이 가능합니다.htt..

STM32로 USB to UART 모듈 만들기 2편(FW-기본통신)

안녕하세요.NUCLEO-F103RB보드를 사용하고 USB to UART 펌웨어를 만들어보겠습니다.구현해야 할 기능은 두 가지입니다.1. USB CDC 통신2. UART 통신PC랑은 USB CDC통신을하고 MCU랑은 UART 통신을 한다면 USB to UART가 됩니다.구체적으로 PC에서 데이터를 송신하는 경우와 MCU에서 데이터를 송신하는 경우 동작은 아래의 그림과 같습니다.1. PC에서 데이터를 송신하는 경우 : PC 터미널프로그램에서 데이터를 입력하게되면 STM32 에서 CDC 리시브 함수가 호출되고 받은 데이터 그대로 UART로 데이터를 송신하면 됩니다.2. MCU에서 데이터를 송신하는 경우 : MCU-A에서 데이터를 입력하게되면 STM32에서 UART 리시브함수(인터럽트방식)가 호출되고 CDC로 ..

STM32로 USB to UART 모듈 만들기 1편(기본 소개)

안녕하세요. 이번 프로젝트에서는 STM32를 이용해 USB to UART 모듈처럼 동작하는 기능을 구현해보겠습니다. 첫번째 글은 그에 대한 기본적인 소개입니다.일반적으로 USB to UART 모듈은 아래의 그림과 같은 구성으로 많이 사용합니다.printf같은 함수로 MCU의 디버깅을 위해 사용합니다.USB to UART MODULE은 PC와 USB인터페이스로 통신하고 MCU와는 UART인터페이스로 연결되어있습니다.PC에서는 해당 장치를 Virtual COM Port로 인식하게 되며, 이를 통해 터미널 프로그램으로 데이터를 주고받을 수 있습니다.USB인터페이스는 CDC 클래스를 사용하며 USB 표준에 정의된 시리얼 통신 클래스입니다.예를들어 Nucleo 보드를 USB케이블로 연결하면 Virtual COM ..

CH341 칩을 이용해서 UART,I2C,SPI 통신하기 5편(보드 테스트)

안녕하세요. 오늘은 4편에서 만들었던 보드의 테스트를 해보겠습니다.보드를 보면 스위치가 2개 있습니다.SW1 스위치는 통신레벨(3.3V or 5V)을 전환하기위한 스위치입니다.SW2 스위치는 I2C,SPI 모드 or UART 모드를 전환하기위한 스위치입니다.*I2C 모드테스트- I2C모드 + 3.3V인경우VCC와 통신레벨 모두 3.3V이고, I2C 패킷도 정상적으로 나왔습니다.- I2C모드 + 5V인경우VCC와 통신레벨 모두 5V이고, I2C 패킷도 정상적으로 나왔습니다. *SPI모드 테스트- SPI모드 + 3.3V인경우VCC와 통신레벨 모두 3.3V이고, SPI패킷도 정상적으로 나왔습니다.- SPI모드 + 5V인경우VCC와 통신레벨 모두 5V이고, SPI패킷도 정상적으로 나왔습니다. *UART모드 테스..

각종 CHIP/CH341 2025.05.29

KICAD 사용하기 2편(심볼/풋프린트 추가하기)

안녕하세요. 오늘은 KICAD에서 기본적으로 제공해주는 심볼/풋프린트가 없을때 추가하는 방법을 알아보겠습니다.*심볼심볼을 직접 만들거나 인터넷에 있는 자료를 다운로드할 수 있습니다.먼저 직접 만드는 방법을 알아보겠습니다.1. 심볼 만들기심볼을 저장할 라이브러리를 만들어야합니다. 새 라이브러리.. 를 클릭하고 원하는 경로에 라이브러리를 만듭니다.저는 mySymbol0521kicad_sym 이라는 라이브러리를 만들었습니다.새 심볼을 클릭합니다.심볼이름을 정해서 생성합니다. 심볼을 생성할때는 아래의 아이콘을 이용해서 만들면 됩니다.두번째 아이콘이 핀을 만드는 아이콘입니다. 핀 이름과 핀 번호에 원하는 정보를 적으면 됩니다.핀번호를 적고 직사각형 아이콘을 클릭하여 직사각형을 만들어서 모양을 만들어주면 됩니다. ..

회로이론/KICAD 2025.05.21

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