PROJECT 11

Speaker 만들기 3편 (회로도작성, SD카드에있는 WAV파일 버튼으로 재생)

안녕하세요. 오늘은 회로도를 작성해보고 SD카드에있는 WAV파일을 버튼으로 재생해보겠습니다.2편에서 사용했던 회로에서 버튼2개만 추가하였습니다.회로도에는 SD카드소켓기준으로 작성하였는데, 실제로는 SD카드 모듈을 이용했습니다. 핀 연결 구성에는 차이가 없습니다.원래는 브레드보드에 연결하여 테스트를 진행하려고 했으나, 스피커 출력에서 잡음이 많이 발생하여 만능기판으로 변경하였습니다.GPT 의견에 따르면, 브레드보드는 접촉 구조와 배선 특성으로 인해 노이즈에 취약합니다.버튼위의 남은공간은 OLED를 추가해서 SD카드에있는 WAV파일을 보여주고 버튼을 이용해서 클릭한 WAV파일을 재생하는 형식으로 할 예정입니다. 현재 글 에서는 버튼1개당 wav파일 1개가 매칭되어있어서 버튼을 클릭하면 정해둔 wav파일이 재..

PROJECT/Speaker 2026.01.04

Speaker 만들기 2편 (SD카드에 있는 wav파일 재생)

안녕하세요. 오늘은 SD카드에있는 wav 파일을 재생시켜보겠습니다.1편에서와 같이 ESP32와 MAX98357A를 이용합니다.*선 연결SD카드1. CS → GPIO5 (SD_CS) 2. MOSI → GPIO23 (DI) 3. MISO → GPIO19 (DO) 4. SCK → GPIO18 (CLK)MAX98357A1. BCLK → GPIO26 (I2S Bit Clock) 2. LRC → GPIO25 (I2S Left/Right Clock, WS) 3. DIN → GPIO22 (I2S Data Out, SD)* 코드의 흐름1. SD카드 초기화2. SD카드에있는 특정 wav파일 정보 읽기3. wav파일 정보를가지고 I2S 초기화4. wav 파일 재생5. wav 파일 재생이 끝나면 ..

PROJECT/Speaker 2025.10.12

Speaker 만들기 1편 (ESP32, MAX98357A, I2S)

안녕하세요. 해당 시리즈에서는 ESP32, MAX98357A, SD카드를 이용해서 SD카드에있는 음원파일을 출력해보고 최종적으로는 ESP32대신 STM32를 이용해서 Speaker 보드를 만들어보겠습니다.① ESP32와 MAX98357A 소개, 그리고 PCM 개념ESP32는 ESP32 WROOM 32를 이용했고 앰프는 MAX98357A를 이용합니다.ESP32와 MAX98357A는 I2S 통신을 합니다.I2S 통신은 오디오 데이터를 PCM 형태로 주고받는 인터페이스입니다. PCM(Pulse Code Modulation)은 아날로그 소리를 일정 주기마다 디지털 숫자로 저장한 것을 의미합니다. PCM 변환 과정은 3단계입니다.1. 샘플링(Sampling)- 아날로그 파형을 일정한 시간 간격으로 잘라서 측정 (..

PROJECT/Speaker 2025.08.29

STM32/STM32_USBtoUART STM32로 USB to UART 모듈 만들기 8편(UART RX를 DMA방식으로 변경)

안녕하세요.기존에는 UART RX가 인터럽트방식이였는데 DMA 방식으로 변경해보겠습니다. (BASE 코드 : 6편)기존의 방식으로 문제가 되는 상황을 재현해보겠습니다.baudrate를 빠른속도로 설정하고 대량의 데이터를 한번에 보내면 Overrun error(ORE)가 걸립니다.ORE는 데이터 레지스터를 읽지 않은 상태에서 새 데이터가 도착한경우 발생합니다. 테라텀으로 아래의 대량의 텍스트를 보내보겠습니다.11만 수신하고 수신을 멈췄습니다. (ORE 발생)지금 코드에서는 ORE가 발생하고나서 RX를 하지않습니다. 그 이유는 수신인터럽트에서 HAL_UART_Receive_IT를 호출해줘야하는데 ORE가 걸려서 HAL_UART_Receive_IT를 호출하지않았기때문입니다. 이때 ORE발생할때 복구하려면 HA..

PROJECT/USB to UART 2025.08.26

STM32로 USB to UART 모듈 만들기 7편(커넥터 C타입으로 변경)

안녕하세요.이전에 만들었던 보드는 커넥터를 USB B 타입을 사용했었는데 USB C 타입으로 변경해보겠습니다.USB B타입은 연결포인트가 VBUS, D+, D-, GND만 있었는데 USB C타입은 VBUS, D+,D-,GND, CC1,CC2,TX1+,TX1-,TX2+,TX2-,SBU1,SBU2가 있습니다.근데 이 모듈은 USB 2.0이므로 VBUS, D+, D-, GND는 똑같이 사용하고 추가적으로 CC1, CC2만 사용하면 됩니다. CC1, CC2핀은 Configuration Channel의 약자이고 장치를 인식해줄수있게하는 핀입니다.그래서 이 라인에 풀다운저항으로 5.1 kΩ(±20%, 4.1 kΩ ~ 6.1 kΩ 범위 허용)을 연결해주면 됩니다.회로도는 아래와 같습니다.해당 커넥터는 열풍기 사용없이..

PROJECT/USB to UART 2025.08.15

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

PROJECT/USB to UART 2025.07.04

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

PROJECT/USB to UART 2025.06.24

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를 하면 세번째 바이트를 얻을 수 있습니다. ..

PROJECT/USB to UART 2025.06.17

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

PROJECT/USB to UART 2025.06.14

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

PROJECT/USB to UART 2025.06.10