./../
  I D :    ¾ÏÈ£ :    IDÀúÀå      ȸ¿ø°¡ÀÔ    ³×°Ô(ÁåÀå) ÂÊÁöº¸³»±â    ¸Þ¸ðÀå    °¢Á¾°è»ê±â    Ä÷¯ºü·¿    À̸ðƼÄÜ(ÇÁ·¹ÀÓ, »õâ)    º¸À¯Àåºñ
¸ñ·ÏÀ¸·Î °¡±â..
STM32H747I-DISCO CP2102 USB Host Æ®·¯ºí½´ÆÃ Á¾ÇÕ º¸°í¼­ ±èÁ¾È£ | »èÁ¦Çϱâ

# STM32H747I-DISCO CP2102 USB Host Æ®·¯ºí½´ÆÃ Á¾ÇÕ º¸°í¼­ º» ¹®¼­´Â STM32H747I-DISCO º¸µåÀÇ USB OTG HS Æ÷Æ®(CN1)¿¡¼­ CP2102 (USB to UART) ¸ðµâÀÌ Á¤»óÀûÀ¸·Î Àνĵǰí Åë½ÅÇϱâ±îÁö ¹ß»ýÇß´ø ¹®Á¦ ¿øÀεé°ú ÇØ°á °úÁ¤, **±×¸®°í ½ÇÁ¦·Î ¼öÁ¤µÈ ÇÙ½É ÄÚµå**¸¦ Á¾ÇÕÀûÀ¸·Î Á¤¸®ÇÑ º¸°í¼­ÀÔ´Ï´Ù. --- ## 1. Çϵå¿þ¾î ÇÉ ¸ÊÇÎ ¹®Á¦ (ULPI Åë½Å ¿À·ù) ### 🚨 ¹®Á¦ »óȲ ¹× ¿øÀÎ °¡Àå óÀ½ ¹ß»ýÇß´ø ¹®Á¦´Â USB ÄÉÀ̺íÀ» ²È¾Æµµ ¾Æ¹«·± ¹ÝÀÀÀÌ ¾ø´Â Çö»óÀ̾ú½À´Ï´Ù. STM32H747I-DISCO º¸µå´Â ¿ÜÀå PHY Ĩ(USB3320C)À» »ç¿ëÇϸç, MCU¿Í PHY °£¿¡´Â °í¼Ó Åë½ÅÀ» À§ÇØ 12°¡´ÚÀÇ ULPI ÇÉÀÌ ¿¬°áµÇ¾î¾ß ÇÕ´Ï´Ù. ÇÏÁö¸¸ ÄÚµå »ó¿¡¼­ ÇÙ½É Á¦¾î ÇÉÀÎ `ULPI_DIR`°ú `ULPI_NXT`°¡ À߸øµÈ ¾Æ³¯·Î±× ÇÉÀ¸·Î ÇÒ´çµÇ¾î Åë½ÅÀÌ ´ÜÀýµÈ »óÅ¿´½À´Ï´Ù. ### 💻 º¯°æµÈ ÄÚµå (`CM7/USB_HOST/Target/usbh_conf.c`) À߸ø ÇÒ´çµÇ¾ú´ø `PC2_C`, `PC3_C` °ü·Ã Äڵ带 ¿ÏÀüÈ÷ Á¦°ÅÇϰí, ȸ·Îµµ¿¡ ¸Â´Â Á¤È®ÇÑ ÇÉ(`PI11`, `PH4`)À» ¼³Á¤Çϵµ·Ï ¼öÁ¤Çß½À´Ï´Ù. ```c // [¼öÁ¤ ÈÄ: ¿Ã¹Ù¸¥ ULPI Á¦¾î ÇÉ ÃʱâÈ­ ÄÚµå] void HAL_HCD_MspInit(HCD_HandleTypeDef* hhcd) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(hhcd->Instance==USB_OTG_HS) { /* ¿ÜÀå PHY¸¦ À§ÇÑ Å¬·° Ȱ¼ºÈ­ */ __HAL_RCC_USB_OTG_HS_CLK_ENABLE(); __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE(); __HAL_RCC_GPIOI_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); // (µ¥ÀÌÅÍ ÇÉ PB0, PB1 µî ¼³Á¤ »ý·«...) /* PI11: ULPI_DIR ÇÉ ¼³Á¤ */ GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); /* PH4: ULPI_NXT ÇÉ ¼³Á¤ */ GPIO_InitStruct.Pin = GPIO_PIN_4; HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); } } ``` --- ## 2. VBUS Àü¿ø °ø±Þ ¹®Á¦ (ÀåÄ¡ Ȱ¼ºÈ­ ºÒ°¡) ### 🚨 ¹®Á¦ »óȲ ¹× ¿øÀÎ ÇÉÀ» °íÄ£ ÈÄ¿¡µµ ÀåÄ¡°¡ ±ú¾î³ªÁö ¾Ê¾Ò½À´Ï´Ù. CP2102´Â Host°¡ 5V(VBUS)¸¦ Á¦°øÇؾ߸¸ µ¿ÀÛÇÏ´Â ¹ö½º ÆÄ¿ö ±â±âÀÔ´Ï´Ù. ¿ÜÀå PHY Ĩ(USB3320C)ÀÌ Àü¿ø ½ºÀ§Ä¡(STMPS2151)¸¦ ¿­¾î 5V¸¦ °ø±ÞÇÏ°Ô ÇÏ·Á¸é, STM32°¡ PHY Ĩ¿¡°Ô ¸í½ÃÀûÀ¸·Î "VBUS Àü¿ø Àΰ¡" ¸í·ÉÀ» ³»·Á¾ß ÇÕ´Ï´Ù. ### 💻 º¯°æµÈ ÄÚµå (`CM7/USB_HOST/Target/usbh_conf.c`) `USB_DriveVbus` ÇÔ¼ö°¡ Á¤»óÀûÀ¸·Î VBUS¸¦ Àΰ¡Çϵµ·Ï ·ÎÁ÷À» º¹±¸Çß½À´Ï´Ù. ```c // [¼öÁ¤ ÈÄ: VBUS ±¸µ¿ ÄÚµå º¹±¸] void USBH_LL_DriverVBUS(USBH_HandleTypeDef *phost, uint8_t state) { /* state °ªÀÌ 1À̸é PHY ĨÀ» ÅëÇØ VBUS Àü¿øÀ» Àΰ¡ÇÔ */ if (phost->id == HOST_HS) { if (state == 0) { USB_DriveVbus(USB_OTG_HS, 0); // VBUS Off } else { USB_DriveVbus(USB_OTG_HS, 1); // VBUS On (ÀÌ ¸í·ÉÀÌ ´©¶ôµÇ¾î ÀÖ¾úÀ½) } } HAL_Delay(200); // Àü¿ø ¾ÈÁ¤È­ ´ë±â } ``` --- ## 3. ¼ÒÇÁÆ®¿þ¾î Ŭ·¡½º ºÒÀÏÄ¡ (Enumeration Áß´Ü) ### 🚨 ¹®Á¦ »óȲ ¹× ¿øÀÎ Çϵå¿þ¾î°¡ Á¤»óÀûÀ¸·Î VBUS¸¦ °ø±ÞÇÏ¿© ÀåÄ¡¸¦ °¨Áö(`Device Attached`)ÇßÀ½¿¡µµ ºÒ±¸ÇÏ°í »óŰ¡ ¸ØÃè½À´Ï´Ù. ÀÌÀ¯´Â STM32 USB Host ¶óÀ̺귯¸®¿¡ **Ç¥ÁØ CDC µå¶óÀ̹ö**°¡ µî·ÏµÇ¾î ÀÖ¾ú±â ¶§¹®ÀÔ´Ï´Ù. CP2102´Â Ç¥ÁØ ÀåÄ¡°¡ ¾Æ´Ñ **º¥´õ Àü¿ë(Vendor Specific, Class `0xFF`)** ÀåÄ¡À̹ǷΠ±âÁ¸ µå¶óÀ̹ö·Î´Â ÀνĵÇÁö ¾Ê½À´Ï´Ù. ### 💻 º¯°æµÈ ÄÚµå (`CM7/USB_HOST/App/usb_host.c`) ±âÁ¸ÀÇ `USBH_CDC_CLASS`¸¦ Áö¿ì°í, »ç¿ëÀÚ°¡ ¸¸µç Ä¿½ºÅÒ µå¶óÀ̹öÀÎ `CP210x_Class`¸¦ µî·ÏÇϵµ·Ï Çì´õ¿Í ÇÔ¼ö¸¦ ¼öÁ¤Çß½À´Ï´Ù. ```c // [¼öÁ¤ ÈÄ: Ä¿½ºÅÒ Å¬·¡½º µî·Ï] /* USER CODE BEGIN Includes */ #include "usbh_cp210x.h" // Ä¿½ºÅÒ µå¶óÀ̹ö Çì´õ Ãß°¡ /* USER CODE END Includes */ void MX_USB_HOST_Init(void) { if (USBH_Init(&hUsbHostHS, USBH_UserProcess, HOST_HS) != USBH_OK) { Error_Handler(); } // ±âÁ¸: if (USBH_RegisterClass(&hUsbHostHS, USBH_CDC_CLASS) != USBH_OK) // ¼öÁ¤: CP2102 Àü¿ë Ä¿½ºÅÒ Å¬·¡½º¸¦ µî·ÏÇÏ¿© º¥´õ ƯÁ¤ ÀåÄ¡¸¦ ÀνÄÇÏ°Ô ÇÔ if (USBH_RegisterClass(&hUsbHostHS, &CP210x_Class) != USBH_OK) { Error_Handler(); } } ``` --- ## 4. Ä¿½ºÅÒ µå¶óÀ̹ö ±â´É ±¸Çö (Baudrate / Åë½Å) ### 🚨 ¹®Á¦ »óȲ ¹× ¿øÀÎ µå¶óÀ̹ö°¡ ¸ÅĪµÇ±ä ÇßÀ¸³ª ±âÁ¸ `usbh_cp210x.c`´Â ³»ºÎ ±¸ÇöÀÌ ¾ø´Â ºó ²®µ¥±â(Template)¿´½À´Ï´Ù. CP2102´Â ´Ü¼ø µ¥ÀÌÅÍ ÀÔÃâ·Â ¿Ü¿¡µµ, Ãʱ⠿¬°á ½Ã **Àü¿ë Á¦¾î ¸í·É(Control Request)**À» º¸³» Baudrate µîÀ» ¼³Á¤ÇØÁÖÁö ¾ÊÀ¸¸é Åë½ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ### 💻 º¯°æµÈ ÄÚµå (`CM7/Core/Src/usbh_cp210x.c`) CP2102ÀÇ ÃʱâÈ­, ÆÄÀÌÇÁ ÇÒ´ç, Åë½Å ¼Óµµ ¼³Á¤(115200 bps), 8N1 ¶óÀÎ ¼¼ÆÃÀ» ó¸®ÇÏ´Â »óÅ ¸Ó½Å°ú µ¥ÀÌÅ͸¦ º¸³»´Â ÇÔ¼ö¸¦ »õ·Ó°Ô ±¸ÇöÇß½À´Ï´Ù. ```c // [¼öÁ¤ ÈÄ: ½ÇÁ¦ CP2102 Á¦¾î ·ÎÁ÷ ±¸Çö ¹ßÃé] static USBH_StatusTypeDef Requests(USBH_HandleTypeDef *phost) { CP210x_HandleTypeDef *CP210x = (CP210x_HandleTypeDef *)phost->pActiveClass->pData; USBH_StatusTypeDef status = USBH_BUSY; switch (CP210x->state) { case CP210X_INIT_IFC_ENABLE: // CP2102 Åë½Å ÀÎÅÍÆäÀ̽º Ȱ¼ºÈ­ ¸í·É if (CP210x_CtlReq(phost, 0x00, 0x01, 0, NULL, 0) == USBH_OK) { CP210x->state = CP210X_INIT_SET_BAUD; } break; case CP210X_INIT_SET_BAUD: // Baudrate ¼³Á¤: 115200 bps (ºÐÁÖºñ: 3686400 / 115200 = 32) if (CP210x_CtlReq(phost, 0x01, 32, 0, NULL, 0) == USBH_OK) { CP210x->state = CP210X_INIT_SET_LINE; } break; case CP210X_INIT_SET_LINE: // Line Control ¼³Á¤: 8 µ¥ÀÌÅÍ ºñÆ®, 1 ½ºÅé ºñÆ®, ÆÐ¸®Æ¼ ¾øÀ½ (0x0800) if (CP210x_CtlReq(phost, 0x03, 0x0800, 0, NULL, 0) == USBH_OK) { CP210x->state = CP210X_INIT_DONE; } break; case CP210X_INIT_DONE: status = USBH_OK; // ÃʱâÈ­ ¿Ï·á, ÀÌÁ¦ µ¥ÀÌÅÍ ¼Û¼ö½Å °¡´É »óÅ·ΠÁøÀÔ break; } return status; } // »ç¿ëÀÚ È£Ãâ¿ë ¼Û½Å ÇÔ¼ö USBH_StatusTypeDef USBH_CP210x_Transmit(USBH_HandleTypeDef *phost, uint8_t *pbuff, uint16_t length) { CP210x_HandleTypeDef *CP210x = (CP210x_HandleTypeDef *)phost->pActiveClass->pData; if (phost->gState != HOST_CLASS || phost->device.is_disconnected) return USBH_FAIL; // ÆÄÀÌÇÁ(ä³Î)°¡ ºñ¾îÀÖÀ» ¶§¸¸ Bulk Out ¿£µåÆ÷ÀÎÆ®·Î µ¥ÀÌÅÍ Àü¼Û if (USBH_LL_GetURBState(phost, CP210x->OutPipe) == USBH_URB_IDLE || USBH_LL_GetURBState(phost, CP210x->OutPipe) == USBH_URB_DONE) { USBH_BulkSendData(phost, pbuff, length, CP210x->OutPipe, 1); return USBH_OK; } return USBH_BUSY; } ``` --- ## 5. FreeRTOS À¯Àú ŽºÅ© ¼Û½Å Àû¿ë ### 🚨 ¹®Á¦ »óȲ ¹× ¿øÀÎ µå¶óÀ̹ö°¡ ¿Ï¼ºµÈ ÈÄ, »ç¿ëÀÚ²²¼­´Â TouchGFX µî ´Ù¸¥ ½Ã½ºÅÛÀ» ¸ØÃßÁö ¾ÊÀ¸¸é¼­ FreeRTOS ŽºÅ© ¾È¿¡¼­ 1Ãʸ¶´Ù `HAL_GetTick()`ÀÇ °ªÀ» CP2102¸¦ ÅëÇØ ¼Û½ÅÇϱ⸦ ¿øÇϼ̽À´Ï´Ù. ### 💻 º¯°æµÈ ÄÚµå (`CM7/Core/Src/main.c`) ¸ÞÀÎ ·çÇÁÀÇ `myTaskFunc01` ŽºÅ©¸¦ ¼öÁ¤ÇÏ¿©, »õ·Î ¸¸µç `USBH_CP210x_Transmit` ÇÔ¼ö¸¦ ÅëÇØ `cnt` °ªÀ» Æ÷¸ËÆÃÇÏ¿© ºñµ¿±â·Î Àü¼ÛÇϵµ·Ï ±¸ÇöÇß½À´Ï´Ù. ```c // [¼öÁ¤ ÈÄ: 1Ãʸ¶´Ù Ä«¿îÆ® ¼Û½Å] void myTaskFunc01(void *argument) { uint32_t cnt = 0; Axis_t rxBuffer; osStatus_t status; char txBuffer[64]; // ¼Û½Å µ¥ÀÌÅ͸¦ ´ãÀ» ¹öÆÛ /* Infinite loop */ for (;;) { cnt = HAL_GetTick(); // ÇöÀç ½Ã½ºÅÛ Æ½(ms) °¡Á®¿À±â // USB È£½ºÆ® Çڵ鷯¸¦ ¿ÜºÎ ÂüÁ¶ÇÏ¿© Àü¼Û ÇÔ¼ö È£Ãâ extern USBH_HandleTypeDef hUsbHostHS; int len = snprintf(txBuffer, sizeof(txBuffer), "Tick: %lu\r\n", cnt); // 1Ãʸ¶´Ù CP2102·Î µ¥ÀÌÅÍ ½î±â USBH_CP210x_Transmit(&hUsbHostHS, (uint8_t *)txBuffer, len); // osWaitForever ´ë½Å 1000ms ŸÀӾƿôÀ» ÁÖ¾î, ¸Þ½ÃÁö°¡ ¾ø´õ¶óµµ 1Ãʸ¶´Ù ·çÇÁ°¡ ¼øÈ¯µÇµµ·Ï º¯°æ status = osMessageQueueGet(myQueueAxisHandle, &rxBuffer, NULL, 1000); if (status == osOK) { printf("axis=%ld,%ld,%ld,%ld,%ld,%ld\r\n", rxBuffer.axis1,rxBuffer.axis2,rxBuffer.axis3, rxBuffer.axis4,rxBuffer.axis5,rxBuffer.axis6); } } } ``` --- ## 6. UI ½º·¹µå ±â¾Æ »óÅ (ÅÍÄ¡½ºÅ©¸° ¸ÔÅë ÇØ°á) ### 🚨 ¹®Á¦ »óȲ ¹× ¿øÀÎ ¸¶Áö¸·À¸·Î Åë½Å ¼º°ø Á÷ÈÄ, È­¸éÀÇ GUI ÅÍÄ¡°¡ ¸ÔÅëÀÌ µÇ´Â Çö»óÀÌ ¹ß»ýÇß½À´Ï´Ù. ÀÌ´Â µð¹ö±ëÀ» À§ÇØ ¼³Á¤ÇÑ `USBH_DEBUG_LEVEL 3` ¿É¼Ç ¶§¹®À̾ú½À´Ï´Ù. USB »óÅ ·Î±×°¡ ´À¸° UART `printf`¸¦ ÅëÇØ µ¿±âÀû(Blocking)À¸·Î ½ñ¾ÆÁö¸é¼­ USB ¹é±×¶ó¿îµå ŽºÅ©°¡ ÀÚ¿øÀ» µ¶Á¡, °á±¹ **TouchGFX ŽºÅ©°¡ CPU¸¦ ¹ÞÁö ¸øÇÏ´Â ±â¾Æ Çö»ó(Starvation)**ÀÌ ¹ß»ýÇß½À´Ï´Ù. ### 💻 º¯°æµÈ ÄÚµå (`CM7/USB_HOST/Target/usbh_conf.h`) µð¹ö±× ·¹º§À» 0À¸·Î µÇµ¹·Á ·Î±× Ãâ·ÂÀ» Â÷´ÜÇÔÀ¸·Î½á TouchGFX ÇÁ·Î¼¼½º°¡ Á¦ ¼Óµµ¸¦ ³¾ ¼ö ÀÖµµ·Ï º¹¿øÇß½À´Ï´Ù. ```c // [¼öÁ¤ ÈÄ: µð¹ö±ë ·Î±× ºñȰ¼ºÈ­] /*---------- -----------*/ #define USBH_DEBUG_LEVEL 0U // ±âÁ¸ 3U¿¡¼­ 0U·Î º¹±¸ÇÏ¿© ½Ã½ºÅÛ ¸ØÃã ÇØ°á /*---------- -----------*/ ``` --- ## ¿ä¾à À̹ø À̽´´Â Çϵå¿þ¾î ÇÉ ¸ÊÇÎ(ULPI) ¿À·ù, VBUS Àü¿ø Àΰ¡ ¸í·É ´©¶ô, Vendor-Specific µð¹ÙÀ̽º¿ë Ŭ·¡½º µî·Ï ºÎÀç, Àü¿ë Control Request ÇÁ·ÎÅäÄÝ ºÎÀç, OS ŽºÅ© StarvationÀ̶ó´Â ¿©·¯ ÃþÀ§ÀÇ ¹®Á¦°¡ º¹ÇÕÀûÀ¸·Î ¾ôÇô ÀÖ¾ú½À´Ï´Ù. À̵éÀ» ¹°¸®°èÃþºÎÅÍ ¾ÖÇø®ÄÉÀÌ¼Ç °èÃþ±îÁö Çϳª¾¿ Â÷±ÙÂ÷±Ù ÇØ°áÇØ ³ª°¨À¸·Î½á ¿Ïº®ÇÑ CP2102 USB Host Á¦¾î ½Ã½ºÅÛÀ» ±¸ÃàÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù.

÷¾ð ´Þ±â
À̸§ : ¾ÏÈ£ :
¹øÈ£    Á¦¸ñ...(÷¾ð) ÀÛ¼ºÀÏ Á¢¼Ó
xxx [°øÁö]ÀÚÀ¯°Ö·¯¸® µî·Ï ¿À·ù ¼öÁ¤ ¿Ï·á 2017-12-22 684691
xxx [°øÁö]ÀÚ·á½Ç ´Ù¿î·Îµå ¿À·ù ó¸® 2017-12-01 30588
xxx [°øÁö]ºñ³­, ±¤°í °Ô½Ã¹°À» ½Å°í, Â÷´Ü, »èÁ¦µË´Ï´Ù. 2005-06-26 26436
253 [ÀϹÝ]  .net core Web »ý¼ºÇÏ¸é ³ª¿À´Â ±¸Á¶ 2026-09-12(Åä) 9
252 [M D]  STM32 °³¹ß ¶§ ´Ù¾çÇÑ USB CDCs »ç¿ëCDC, CP210x, FTDI, CH34x, PL2303) 2026-09-11(±Ý) 17
251 [M D] > STM32H747I-DISCO CP2102 USB Host Æ®·¯ºí½´ÆÃ Á¾ÇÕ º¸°í¼­ < 2026-09-11(±Ý) 18
250 [ÀϹÝ]  STM32H747I-DISCO¿¡¼­ STM32CubeMX ÅÛÇø´¶§¹®¿¡ USB OTG ¹®Á¦ ¹ß»ýÇÒ¶§ 2026-09-10(¸ñ) 23
249 [M D]  TouchGFX¿¡¼­ ¹öư°°Àº°Å »èÁ¦ ÇßÀ»¶§ make: *** No rule to make target.. ¿À·ù 2026-08-20(¸ñ) 101
248 [M D]  STM TouchGFX¼³°èÇÒ¶§ main¿¡¼­ View¿¡ Á¢±ÙÇÏ´Â ¼ø¼­ 2026-08-16(ÀÏ) 73
247 [M D]  STM TouchGFX¼³°èÇÒ¶§ View°¡ main¿¡ Á¢±ÙÇÏ´Â ¼ø¼­ 2026-08-16(ÀÏ) 127
246 [M D]  MCU Task°ü¸®ÇÒ¶§ ÇÊ¿äÇÑ ¼¼¸¶Æ÷¾î(Semaphore)¿Í ¹ÂÅØ½º(Mutex) 2026-08-09(ÀÏ) 115
245 [M D]  STM32F ¸¶ÀÌÄÄ °øºÎÇÒ¶§ RAM¿¡ ¿Ã·Á¼­ ½ÃÇèÇϱâ.(¼Óµµ ºü¸§) 2026-08-08(Åä) 109
244 [ÀϹÝ]  STM32F767°ú FreeRTOS¸¦ ÀÌ¿ëÇØ ¼³°èÇÒ¶§ Time base Source´Â? 2026-08-08(Åä) 111
243 [ÀϹÝ]  VSCode·Î STM32 °³¹ßÇÒ¶§ printf¿¡¼­ ½Ç¼ö Ãâ·Â ¾ÈµÇ¸é 2026-07-16(¸ñ) 968
242 [ÀϹÝ]  VisualStudioÀ¸·Î ¸¸µç ÇÁ·Î±×·¥ .net ¹öÀü ¿Ã¸®±â À§ÇØ 2026-07-02(¸ñ) 1186
241 [C#]  c# winform¿¡¼­ URL QR»ý¼º 2026-06-30(È­) 1028
240 [ÀϹÝ]  VC ÄÄÆÄÀÏÇÒ¶§ ¼Ö·ù¼Ç Æú´õ¿¡ ÄÄÆÄÀÏµÈ ÆÄÀÏÀÌ »ý¼ºµÉ¶§ 2026-06-29(¿ù) 412
239 [XML]  IIS 8.0 ÀÌ»ó IP Â÷´Ü web.config ¼³Á¤ 2026-06-13(Åä) 143
238 [ÀϹÝ]  C#.net 6ÀÌ»ó ºôÆ®ÇÒ¶§ TargetFramework Æú´õ »ý±â´Â°Å ¾ø¾Ö±â 2026-04-16(¸ñ) 443
237 [ÀϹÝ]  windowsÀÇ °¢Á¾ ¿¡µðÅÍ¿¡¼­ ÇÑ±Û ÀԷ½ÿ¡ ¿Ï¼ºµÇ¾ß Ç¥±âµÇ´Â ¹®Á¦ 2026-04-10(±Ý) 437
236 [ÀϹÝ]  MPLab X 6.2¿¡¼­ ICD3 ¿¬°á ½ÇÆÐ°¡ ³ª¿Ã¶§ 2026-04-07(È­) 454
235 [ÀϹÝ]  Verolog HDL Operation (¿¬»êÀÚ) 2026-03-27(±Ý) 410
234 [ÀϹÝ]  Mac OS Sequoia¸¦ OCLP·Î ¼³Ä¡ÇßÀ»¶§ Chrome ¿À·ù ÇØ°á¹æ¹ý 2026-03-21(Åä) 681
°Ë»ö :
Page : ÀÌÀü 1  2  3  4  5  6  7  8  9  10  11  12  13  ´ÙÀ½




Copyright 2003-2026 ¨Ï ±èÁ¾È£. All rights reserved. kimjongho.co.kr kimjongho.kr kimjongho.net kimjongho.com