STM32 31

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 ..

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

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

STM32 NUCLEO BOARD printf 사용하기

안녕하세요.오늘은 stm32에서 printf 함수를 사용해보겠습니다.사용할 보드는 NUCLEO-F103RB입니다.ST LINK가 Virtual com port를 지원하고 회로도를보면 STM32F103RB의 UART2에 연결되어있습니다.그래서 별도의 usb to uart없이도 pc와 uart통신이 가능합니다.그래서 그런지 NUCLEO-F103RB 프로젝트를 만들면 기본적으로 UART2가 활성화되어있습니다.프로젝트를 생성하고나서 HAL_UART_Transmit함수를 이용해서 TX가 가능합니다. 해당 방법을 사용하는 데는 문제는 없지만 불편하므로 printf가 이용하기 편리하므로 printf를 이용해 보겠습니다.printf를 이용해보겠습니다. 경고가 발생합니다. printf는 에 선언되어있는데 를 includ..

STM32/간단한팁 2025.01.20