대~~충 프로젝트 하나 파고 외부 8MHz로 해서 PLL 사용해 USB에는 48MHz를 넣어준다.

USB Fast Speed 를 지원하도록 하고 CDC(VCP) 를 지원하도록 하면


PA11 / PA12에 USB_DP / USB_DM 이라고 표기된다.
그런데.. D는 D+ 니까 Positive 같은데 왜 D-는 DM이지? negative DN 이어야 하지 않나?
(ai 답변. data minus.. -_-)

아무튼 미들웨어 추가하면, 미들웨어와 USB_DEVICE 라는 디렉토리가 추가된다.

함수 쓰는건 귀찮으니 대충 끌어옴.
|
int main(void)
{
/* USER CODE BEGIN 1 */
#define BUF_SIZE 30
uint8_t usb_buf[BUF_SIZE];
uint32_t count = 0;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USB_DEVICE_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
sprintf((char*)usb_buf, "USB CDC TEST %ld\r\n", count);
CDC_Transmit_FS(usb_buf, BUF_SIZE);
HAL_Delay(1000);
memset(usb_buf,0,BUF_SIZE);
count++;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
|
[링크 : https://eteo.tistory.com/194]
꽂으니 아래처럼 인식한다.
| $ sudo demsg -w [25664.443438] usb 1-2: new full-speed USB device number 26 using xhci_hcd [25664.574720] usb 1-2: New USB device found, idVendor=0483, idProduct=5740, bcdDevice= 2.00 [25664.574741] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [25664.574748] usb 1-2: Product: STM32 Virtual ComPort [25664.574754] usb 1-2: Manufacturer: STMicroelectronics [25664.579419] cdc_acm 1-2:1.0: ttyACM0: USB ACM device |
| $ lsusb -t -v /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M ID 1d6b:0002 Linux Foundation 2.0 root hub |__ Port 2: Dev 26, If 0, Class=Communications, Driver=cdc_acm, 12M ID 0483:5740 STMicroelectronics Virtual COM Port |__ Port 2: Dev 26, If 1, Class=CDC Data, Driver=cdc_acm, 12M ID 0483:5740 STMicroelectronics Virtual COM Port |
minicom은 9600으로 하던 115200 으로 하던 동일하게 값이 잘 들어온다. 신기하네
다만 많은 데이터가 있을때는 어떻게 될 진 미지수. 나중에 테스트 해봐야지

1회 굽기는 되는데 그 이후로 rebooting이 안될 때
step 1. reset 누르고 connect 누르고 reset 뗀다음 full chip erase

step 2. cubeide에서 swd 핀 할당해주기

"no debug" 로 두면 PA13/PA14가 주황색으로 되는데, 그러면 계속 retry 뜨니까 Serial Wire로 변경해준다.(SWO)

이건 실패시
STMicroelectronics ST-LINK GDB server. Version 7.8.0 Copyright (c) 2024, STMicroelectronics. All rights reserved. Starting server with the following options: Persistent Mode : Disabled Logging Level : 1 Listen Port Number : 61234 Status Refresh Delay : 15s Verbose Mode : Disabled SWD Debug : Enabled Waiting for debugger connection... Debugger connected Waiting for debugger connection... Debugger connected Waiting for debugger connection... ------------------------------------------------------------------- STM32CubeProgrammer v2.17.0 ------------------------------------------------------------------- Log output file: /tmp/STM32CubeProgrammer_RFILwX.log ST-LINK SN : 31000D000D2D343632525544 ST-LINK FW : V2J45S7 Board : -- Voltage : 3.21V SWD freq : 4000 KHz Connect mode: Under Reset Reset mode : Hardware reset Device ID : 0x410 Revision ID : Rev X Device name : STM32F101/F102/F103 Medium-density Flash size : 128 KBytes Device type : MCU Device CPU : Cortex-M3 BL Version : -- Memory Programming ... Opening and parsing file: ST-LINK_GDB_server_byIESj.srec File : ST-LINK_GDB_server_byIESj.srec Size : 31.65 KB Address : 0x08000000 Erasing memory corresponding to segment 0: Erasing internal memory sectors [0 31] Download in Progress: File download complete Time elapsed during download operation: 00:00:01.365 Verifying ... Download verified successfully Shutting down... Target is not responding, retrying... Target is not responding, retrying... Target is not responding, retrying... Target is not responding, retrying... Target is not responding, retrying... |
이건 설정해주고 잘 될 때
| STMicroelectronics ST-LINK GDB server. Version 7.8.0 Copyright (c) 2024, STMicroelectronics. All rights reserved. Starting server with the following options: Persistent Mode : Disabled Logging Level : 1 Listen Port Number : 61234 Status Refresh Delay : 15s Verbose Mode : Disabled SWD Debug : Enabled Waiting for debugger connection... Debugger connected Waiting for debugger connection... Debugger connected Waiting for debugger connection... ------------------------------------------------------------------- STM32CubeProgrammer v2.17.0 ------------------------------------------------------------------- Log output file: /tmp/STM32CubeProgrammer_0DypHa.log ST-LINK SN : 31000D000D2D343632525544 ST-LINK FW : V2J45S7 Board : -- Voltage : 3.21V SWD freq : 4000 KHz Connect mode: Under Reset Reset mode : Hardware reset Device ID : 0x410 Revision ID : Rev X Device name : STM32F101/F102/F103 Medium-density Flash size : 128 KBytes Device type : MCU Device CPU : Cortex-M3 BL Version : -- Memory Programming ... Opening and parsing file: ST-LINK_GDB_server_a2ozrR.srec File : ST-LINK_GDB_server_a2ozrR.srec Size : 31.65 KB Address : 0x08000000 Erasing memory corresponding to segment 0: Erasing internal memory sectors [0 31] Download in Progress: File download complete Time elapsed during download operation: 00:00:01.371 Verifying ... Download verified successfully Shutting down... Exit. |
[링크 : https://blog.naver.com/crucian2k3/221533654464]
stlink/v2 에서는 3v3 핀을 제거하고 usb를 연결해주면 깔끔하게 전원이랑 문제없이 연결된다.
+
2026.01.06
되긴한데.. 먼가 잘되진 않는 느낌. 소스코드 하나 붙여넣고 그러면 정상적으로 나오지 않고
usb 연결한채로 프로그램을 다시 구으면 usb 뽑았다 꽂기 전에는 재기동이 정상적으로 이루어지지 않는다.
클럭을 올려도 (72MHz) 안되는걸 보면 다른게 문제인데... 멀까?
| // main.c void USB_CDC_RxHandler(uint8_t* Buf, uint32_t Len) { for(int idx = 0; idx < Len;idx++) if(Buf[idx] == 0x0D) Buf[idx] = 0x0A; CDC_Transmit_FS(Buf, Len); } // usbd_cdc_if.c static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6 */ USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); USBD_CDC_ReceivePacket(&hUsbDeviceFS); USB_CDC_RxHandler(UserRxBufferFS, *Len); memset(UserRxBufferFS, '\0', *Len); return (USBD_OK); /* USER CODE END 6 */ } |
'embeded > Cortex-M3 STM' 카테고리의 다른 글
| stm32f103 bluepill 회로도, usb 풀업 (1) | 2026.01.05 |
|---|---|
| bluepill 보드를 stlink v2로 만들기 (0) | 2025.12.16 |
| stm32f103ret crc (0) | 2025.12.09 |
| stm32f103ret middleware - usb (0) | 2025.12.09 |
| stm32f103ret connectivity - usb (0) | 2025.12.09 |
