0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

完整的USB-PD應(yīng)用

麥辣雞腿堡 ? 來源:意法半導(dǎo)體 ? 作者:意法半導(dǎo)體 ? 2023-02-07 14:54 ? 次閱讀

3配置項(xiàng)目

Project Manager主選項(xiàng)卡下,將Project選項(xiàng)卡下的最小堆棧大小配置為 0xC00 。這是第一個值,以后可以根據(jù)應(yīng)用需要進(jìn)行調(diào)整。

Advanced Settings選項(xiàng)卡下,將 LPUART 驅(qū)動程序更改為 LL 以節(jié)省一點(diǎn)內(nèi)存堆大小。由于我們不需要 ADCI2C 初始化函數(shù)(由 BSP 驅(qū)動程序處理),因此取消選中MX_I2C2_Init 和 MX_ADC1_Init 函數(shù)的 生成代碼 。

4將BSP添加到項(xiàng)目中

需要將 X-NUCLEO-SRC1M1 擴(kuò)展板的5 分鐘板級支持包 (BSP) 添加到項(xiàng)目中。這些文件需要手動復(fù)制到項(xiàng)目的文件夾中。從 GitHub x-cube-tcpp

獲取最新的 BSP 。

手動復(fù)制以下三個文件夾:


進(jìn)入:


然后,在項(xiàng)目的根文件夾中創(chuàng)建一個名為“ .extSettings ”的文件(請注意文件名中的點(diǎn)字符)并用以下代碼填充它:


該文件用于告訴代碼生成器在生成項(xiàng)目時(shí)包含 BSP 文件。

5生成代碼

使用 Ctrl+s 保存文件,并在出現(xiàn)提示時(shí)選擇生成代碼。您還可以通過單擊項(xiàng)目/生成代碼或按 Alt+K 從 STM32CubeIDE 菜單生成代碼。
出現(xiàn)一條警告,通知未定義正確的 HAL 時(shí)基。使用專用定時(shí)器作為 HAL 時(shí)基源更安全。
對于此演示,可以通過單擊是忽略以下警告。

信息白色.png 信息
這成為在即將發(fā)布的固件包交付中推薦的標(biāo)準(zhǔn)工作方式,尤其是在使用 CMSIS OS V2 時(shí),它將 Systick 定義為 FreeRTOS? 時(shí)基。對于此演示,可以通過單擊是忽略警告。

在這個項(xiàng)目中,可以找到不同的文件夾:

  • USBPD文件夾包含我們需要編輯以豐富 Power Delivery 應(yīng)用程序的源文件。
  • Core文件夾包含項(xiàng)目核心的源文件。
  • Drivers文件夾包含 STM32的HAL 驅(qū)動程序,以及 Nucleo 板和 X-NUCLEO-SRC1M1 擴(kuò)展板的 BSP。
  • Middleware文件夾包含 FreeRTOS? 和 USB-PD的源文件和庫。
  • Utilities文件夾包含 GUI(UCPD 監(jiān)視器)和跟蹤器嵌入式源文件部分。

項(xiàng)目的 Explorer 視圖中的Drivers文件夾必須包含之前添加的 BSP 文件夾。

6完整的USB-PD應(yīng)用

Now that the peripherals are initialized by STM32CubeMX, some minimum level of the application needs to be added:

  • src1m1_conf.h file needs to be created from its template, and added to the project
  • User code needs to be added in several files

6.1 Add SRC1M1 configuration file

In the Drivers\\BSP\\X-NUCLEO-SRC1M1 folder you will find src1m1_conf_template.h . Copy it to Core\\Inc folder, and rename it src1m1_conf.h . It is the configuration file used for the X-NUCLEO-SRC1M1 BSP.

6.2 Modification in stm32g0xx_it.c

                   |

在/ USER CODE BEGIN-END Includes / 標(biāo)簽之間添加以下代碼:

/* 用戶代碼開始包括 */ 
#include  "src1m1_conf.h"
/* 用戶代碼結(jié)束包括 */

在/ USER CODE BEGIN-END 1 / 標(biāo)簽之間添加以下代碼:

/* USER CODE BEGIN 1 */ 
#if defined(TCPP0203_SUPPORT) 
/** 
  * @brief 該函數(shù)處理外線 4_15 中斷請求。
  *(在 TCPP0203 管理的情況下關(guān)聯(lián)到 FLGn 線)
  * @retval None 
  */ 
void  TCPP0203_PORT0_FLG_EXTI_IRQHANDLER ( void ) 
{ 
  /* 管理標(biāo)志 */ 
  if  ( TCPP0203_PORT0_FLG_EXTI_IS_ACTIVE_FLAG ()  !=  RESET ) 
  { 
    /* 調(diào)用 BSP USBPD PWR 回調(diào) */ 
    BSP_USBPD_CPWR_CWR_R ( USBPD_PWR_TYPE_C_PORT_1 );

    /* 清除標(biāo)志 */ 
    TCPP0203_PORT0_FLG_EXTI_CLEAR_FLAG (); 
  } 
} 
#endif /* TCPP0203_SUPPORT */
/* 用戶代碼結(jié)束 1 */

6.3 usbpd_dpm_user.h中的修改

在/ USER CODE BEGIN-END Typedef / 標(biāo)簽之間添加以下代碼:

/* 用戶代碼開始 Typedef */ 
typedef  struct 
{ 
  uint32_t   DPM_ListOfRcvSNKPDO [ USBPD_MAX_NB_PDO ];  /*!< 從端口伙伴接收到的接收器功率數(shù)據(jù)對象列表
                                            (當(dāng)端口伙伴是接收器或 DRP 端口時(shí))。*/ 
  uint32_t   DPM_NumberOfRcvSNKPDO ;       /*!< 從端口伙伴接收到的接收器功率數(shù)據(jù)對象的數(shù)量
                                             (當(dāng)端口伙伴是接收器或 DRP 端口時(shí))。
                                             此參數(shù)必須設(shè)置為低于
                                             USBPD_MAX_NB_PDO */ 
  uint32_t   DPM_RDOPosition ;             /*!< 請求的 DO 在功能源列表中的 RDO 位置 */ 
  uint32_t   DPM_RDOPositionPrevious ;     /*!< RDO 所請求 DO 在功能源列表中的位置 */ 
  uint32_t   DPM_RequestedVoltage ;        /*!< 請求電壓值 */ 
  uint32_t   DPM_RequestedCurrent ;        /*!< 請求電流值 */ 
  uint32_t   DPM_RcvRequestDOMsg ;

  uint32_t   DPM_RequestDOMsg ;            /*!< 要發(fā)送的請求功率數(shù)據(jù)對象消息 */ 
  uint32_t   DPM_RequestDOMsgPrevious ;    /*!< 要發(fā)送的上一個請求電源數(shù)據(jù)對象消息 */ 
}  USBPD_HandleTypeDef ; 
/* 用戶代碼結(jié)束類型定義 */

在/ USER CODE BEGIN-END Private_Variables / 標(biāo)簽之間添加以下代碼:

/* 用戶代碼開始 Private_Variables */ 
extern  USBPD_HandleTypeDef  DPM_Ports [ USBPD_PORT_COUNT ]; 
/* 用戶代碼結(jié)束 Private_Variables */

6.4 usbpd_pdo_defs.h中的修改

在/ USER CODE BEGIN-END typedef / 標(biāo)簽之間添加以下代碼:

/* 用戶代碼開始 typedef */

/** 
  * @brief USBPD 端口 PDO 結(jié)構(gòu)定義
  */ 
typedef  struct 
{ 
  uint32_t  * ListOfPDO ;          /*!< Power 數(shù)據(jù)對象列表上的指針,定義
                                      端口功能 */

  uint8_t   * NumberOfPDO ;        /*!< ListOfPDO 中定義的電源數(shù)據(jù)對象的數(shù)量
                                     此參數(shù)必須設(shè)置為最大值 @ref USBPD_MAX_NB_PDO 值 */ 
}  USBPD_PortPDO_TypeDef ;

/** 
   * @brief USBPD 端口 PDO 存儲結(jié)構(gòu)定義
   */ 
typedef  struct 
{ 
  USBPD_PortPDO_TypeDef     SourcePDO ;       /*!< SRC 電源數(shù)據(jù)對象 */ 
}  USBPD_PWR_Port_PDO_Storage_TypeDef ; 
/* 用戶代碼結(jié)束 typedef */

6.5 usbpd_pwr_if.c中的修改

在/ USER CODE BEGIN-END Private_Variables / 標(biāo)簽之間添加以下代碼:

/* USER CODE BEGIN Private_Variables */ 
/** 
  * @brief USBPD Port PDO Storage 數(shù)組聲明
  */ 
USBPD_PWR_Port_PDO_Storage_TypeDef  PWR_Port_PDO_Storage [ USBPD_PORT_COUNT ]; 
/* 用戶代碼結(jié)束 Private_Variables */

在/ USER CODE BEGIN-END USBPD_PWR_IF_Init / 標(biāo)簽之間添加以下代碼:

/* 用戶代碼開始 USBPD_PWR_IF_Init */ 
  USBPD_StatusTypeDef  _status  =  USBPD_OK ;

  /* 設(shè)置指向 PDO 值和端口 0 號的鏈接(在 H 文件的 PDO 數(shù)組中定義)。*/ 
  PWR_Port_PDO_Storage [ USBPD_PORT_0 ]。來源 PDO 。ListOfPDO  =  ( uint32_t  * )  PORT0_PDO_ListSRC ; 
  PWR_Port_PDO_Storage [ USBPD_PORT_0 ]。來源 PDO 。NumberOfPDO  =  & USBPD_NbPDO [ 1 ];

  返回 _狀態(tài);
/* 用戶代碼結(jié)束 USBPD_PWR_IF_Init */

在/ USER CODE BEGIN-END USBPD_PWR_IF_SetProfile / 標(biāo)簽之間添加以下代碼:

/* 用戶代碼開始 USBPD_PWR_IF_SetProfile */ 
  USBPD_PDO_TypeDef         _pdo ; 
  USBPD_SNKRDO_TypeDef      _rdo ;

  _rdo 。d32  =  DPM_Ports [端口號]。DPM_RcvRequestDOMsg ; 
  _pdo 。d32  =  PORT0_PDO_ListSRC [ 0 ];

  返回 (bsp_error_none  == bsp_usbpd_pwr_vbussetvoltage_fixed (portnum ,
                                                    _pdo。srcfixedpdo。voltagein50mvunits * 50 ,(_ rdo.rdo。_rdo。_rdo。fixiaiablerdo.firedvariablerdo.promertin10MANITS * 10 )_ _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /* 用戶代碼結(jié)束 USBPD_PWR_IF_SetProfile */

在/ USER CODE BEGIN-END USBPD_PWR_IF_GetPortPDOs / 標(biāo)簽之間添加以下代碼:

/* 用戶代碼開始 USBPD_PWR_IF_GetPortPDOs */ 
  uint32_t    nbpdo ,  index ,  nb_valid_pdo  =  0 ; 
  uint32_t    * ptpdoarray  =  NULL ; 
  USBPD_PDO_TypeDef  pdo_first ; 
  USBPD_PDO_TypeDef  pdo ;

  /* Check if valid port */
  if (USBPD_PORT_IsValid(PortNum))
  {
    /* According to the type of PDO to be read, set the pointer on values and number of elements */
    switch(DataId)
    {
    case USBPD_CORE_DATATYPE_SRC_PDO :
      nbpdo = *PWR_Port_PDO_Storage[PortNum].SourcePDO.NumberOfPDO;
      ptpdoarray = PWR_Port_PDO_Storage[PortNum].SourcePDO.ListOfPDO;
      /* Save the 1st PDO */
      pdo_first.d32 = *ptpdoarray;
      /* Reset un-chunked bit if current revision is PD2.0*/
      if (USBPD_SPECIFICATION_REV2 == DPM_Params[PortNum].PE_SpecRevision)
      {
        pdo_first.SRCFixedPDO.UnchunkedExtendedMessage  = USBPD_PDO_SRC_FIXED_UNCHUNK_NOT_SUPPORTED;
      }
      break;
    default :
      nbpdo = 0;
      break;
    }

    /* Copy PDO data in output buffer */
    for (index = 0; index < nbpdo; index++)
    {
      pdo.d32 = *ptpdoarray;
      /* Copy only PDO (and not APDO in case of current revision is PD2.0) */
      if ((USBPD_SPECIFICATION_REV2 == DPM_Params[PortNum].PE_SpecRevision)
          && (pdo.GenericPDO.PowerObject == USBPD_CORE_PDO_TYPE_APDO))
      {
      }
      else
      {
        /* Copy 1st PDO as potentially FRS or UNCHUNKED bits have been reset */
        if (0 == index)
        {
          (void)memcpy(Ptr, (uint8_t*)&pdo_first.d32, 4u);
        }
        else
        {
          (void)memcpy((Ptr + (nb_valid_pdo * 4u)), (uint8_t*)ptpdoarray, 4u);
        }
        nb_valid_pdo++;
      }
      ptpdoarray++;
    }
    /* Set the number of read PDO (number of u32 elements); */
    *Size = nb_valid_pdo;
  }
/* USER CODE END USBPD_PWR_IF_GetPortPDOs */

Add the following code between the / USER CODE BEGIN-END USBPD_PWR_IF_SearchRequestedPDO / tags:

/* USER CODE BEGIN USBPD_PWR_IF_SearchRequestedPDO */
  if((RdoPosition == 0) || (RdoPosition > *PWR_Port_PDO_Storage[PortNum].SourcePDO.NumberOfPDO))
  {
    /* Invalid PDO index */
  return USBPD_FAIL;
  }

  *Pdo = PWR_Port_PDO_Storage[PortNum].SourcePDO.ListOfPDO[RdoPosition - 1];
  return USBPD_OK;
/* USER CODE END USBPD_PWR_IF_SearchRequestedPDO */

6.6 Modification in usbpd_dpm_user.c

Add the following code between the / USER CODE BEGIN-END Private_Variables / tags:

/* USER CODE BEGIN Private_Variables */
USBPD_HandleTypeDef DPM_Ports[USBPD_PORT_COUNT];
/* USER CODE END Private_Variables */

Add the following code between the / USER CODE BEGIN-END USBPD_USER_PRIVATE_FUNCTIONS_Prototypes / tags:

/* USER CODE BEGIN USBPD_USER_PRIVATE_FUNCTIONS_Prototypes */
static USBPD_StatusTypeDef DPM_TurnOnPower(uint8_t PortNum, USBPD_PortPowerRole_TypeDef Role);
static USBPD_StatusTypeDef DPM_TurnOffPower(uint8_t PortNum, USBPD_PortPowerRole_TypeDef Role);
/* USER CODE END USBPD_USER_PRIVATE_FUNCTIONS_Prototypes */

Add the following code between the / USER CODE BEGIN-END USBPD_DPM_UserInit / tags:

/* USER CODE BEGIN USBPD_DPM_UserInit */
  /* PWR SET UP */
  if(USBPD_OK !=  USBPD_PWR_IF_Init())
  {
    return USBPD_ERROR;
  }
  return USBPD_OK;
/* USER CODE END USBPD_DPM_UserInit */

Add the following code between the / USER CODE BEGIN-END USBPD_DPM_UserCableDetection / tags:

/* USER CODE BEGIN USBPD_DPM_UserCableDetection */
  switch(State)
  {
  case USBPD_CAD_EVENT_ATTACHED:
  case USBPD_CAD_EVENT_ATTEMC:
    {
      if (DPM_Params[PortNum].PE_PowerRole == USBPD_PORTPOWERROLE_SRC)
      {
        if (USBPD_OK != USBPD_PWR_IF_VBUSEnable(PortNum))
        {
          /* Should not occur */
          osDelay(6000);
          NVIC_SystemReset();
        }
      }
      break;
    }
  case USBPD_CAD_EVENT_DETACHED :
  case USBPD_CAD_EVENT_EMC :
  default :
    {
      if (DPM_Params[PortNum].PE_PowerRole == USBPD_PORTPOWERROLE_SRC)
      {
        if (USBPD_OK != USBPD_PWR_IF_VBUSDisable(PortNum))
        {
          /* Should not occur */
          while(1);
        }
      }
      break;
    }
  }
/* USER CODE END USBPD_DPM_UserCableDetection */

Add the following code between the / USER CODE BEGIN-END USBPD_DPM_HardReset / tags:

/* USER CODE BEGIN USBPD_DPM_HardReset */
  switch (Status)
  {
  case USBPD_HR_STATUS_WAIT_VBUS_VSAFE0V:
    if (USBPD_PORTPOWERROLE_SRC == CurrentRole)
    {
      /* Reset the power supply */
      DPM_TurnOffPower(PortNum, USBPD_PORTPOWERROLE_SRC);
    }
    break;

  case USBPD_HR_STATUS_WAIT_VBUS_VSAFE5V:
    if (CurrentRole == USBPD_PORTPOWERROLE_SRC)
    {
      /* Power on the power supply */
      DPM_TurnOnPower(PortNum, CurrentRole);
    }
    break;

  default:
    break;
  }
/* USER CODE END USBPD_DPM_HardReset */

Add the following code between the / USER CODE BEGIN-END USBPD_DPM_GetDataInfo / tags:

/* USER CODE BEGIN USBPD_DPM_GetDataInfo */
  /* Check type of information targeted by request */
  switch(DataId)
  {
    case USBPD_CORE_DATATYPE_REQ_VOLTAGE:       /*!< Get voltage value requested for BIST tests, expect 5V */
      *Size = 4;
      (void)memcpy((uint8_t*)Ptr, (uint8_t *)&DPM_Ports[PortNum].DPM_RequestedVoltage, *Size);
      break;
    case USBPD_CORE_DATATYPE_SRC_PDO:           /*!< Handling of port Source PDO                           */
      USBPD_PWR_IF_GetPortPDOs(PortNum, DataId, Ptr, Size);
      *Size *= 4;
      break;
 // case USBPD_CORE_PPS_STATUS:                 /*!< PPS Status message content                            */
    // break;
 // case USBPD_CORE_SNK_EXTENDED_CAPA:          /*!< Retrieve of Sink Extended capability message content */
    // break;
 // case USBPD_CORE_INFO_STATUS:                /*!< Information status message content                    */
    // break;
 // case USBPD_CORE_MANUFACTURER_INFO:          /*!< Retrieve of Manufacturer info message content         */
    // break;
 // case USBPD_CORE_BATTERY_STATUS:             /*!< Retrieve of Battery status message content            */
    // break;
 // case USBPD_CORE_BATTERY_CAPABILITY:         /*!< Retrieve of Battery capability message content        */
    // break;
    default:
      DPM_USER_DEBUG_TRACE(PortNum, "ADVICE: update USBPD_DPM_GetDataInfo:%d", DataId);
      break;
  }
/* USER CODE END USBPD_DPM_GetDataInfo */

Add the following code between the / USER CODE BEGIN-END USBPD_DPM_SetDataInfo / tags:

/* USER CODE BEGIN USBPD_DPM_SetDataInfo */
  /* Check type of information targeted by request */
  switch(DataId)
  {
   case USBPD_CORE_DATATYPE_RDO_POSITION:   /*!< Reset the PDO position selected by the sink only          */
    if (Size == 4)
    {
      uint8_t* temp;
      temp = (uint8_t*)&DPM_Ports[PortNum].DPM_RDOPosition;
      (void)memcpy(temp, Ptr, Size);
      DPM_Ports[PortNum].DPM_RDOPositionPrevious = *Ptr;
      temp = (uint8_t*)&DPM_Ports[PortNum].DPM_RDOPositionPrevious;
      (void)memcpy(temp, Ptr, Size);
    }
    break;
 // case USBPD_CORE_DATATYPE_RCV_SRC_PDO:   /*!< Storage of Received Source PDO values                     */
   // break;
 // case USBPD_CORE_DATATYPE_RCV_SNK_PDO:   /*!< Storage of Received Sink PDO values                       */
   // break;
    case USBPD_CORE_DATATYPE_RCV_REQ_PDO :  /*!< Storage of Received Sink Request PDO value                */
      if (Size == 4)
      {
        memcpy((uint8_t *)&DPM_Ports[PortNum].DPM_RcvRequestDOMsg,  Ptr, 4);
      }
      break;
 // case USBPD_CORE_INFO_STATUS:            /*!< Information status message content                        */
   // break;
 // case USBPD_CORE_ALERT:                  /*!< Storing of received Alert message content                 */
   // break;
 // case USBPD_CORE_GET_MANUFACTURER_INFO:  /*!< Storing of received Get Manufacturer info message content */
   // break;
 // case USBPD_CORE_GET_BATTERY_STATUS:     /*!< Storing of received Get Battery status message content    */
   // break;
 // case USBPD_CORE_GET_BATTERY_CAPABILITY: /*!< Storing of received Get Battery capability message content*/
   // break;
 // case USBPD_CORE_SNK_EXTENDED_CAPA:      /*!< Storing of Sink Extended capability message content       */
   // break;
    default:
      DPM_USER_DEBUG_TRACE(PortNum, "ADVICE: update USBPD_DPM_SetDataInfo:%d", DataId);
      break;
  }
/* USER CODE END USBPD_DPM_SetDataInfo */

Add the following code between the / USER CODE BEGIN-END USBPD_DPM_EvaluateRequest / tags:

/* USER CODE BEGIN USBPD_DPM_EvaluateRequest */
  USBPD_StatusTypeDef _retr = USBPD_REJECT;
  USBPD_PDO_TypeDef pdo;
  USBPD_SNKRDO_TypeDef rdo;

  /* read the request value received */
  rdo.d32 = DPM_Ports[PortNum].DPM_RcvRequestDOMsg;

  /* Search PDO in Port Source PDO list, that corresponds to Position provided in Request RDO */
  if (USBPD_PWR_IF_SearchRequestedPDO(PortNum,  rdo.GenericRDO.ObjectPosition, &pdo.d32) == USBPD_OK)
  {

    /* Evaluate the request */
    if(pdo.GenericPDO.PowerObject == USBPD_CORE_PDO_TYPE_FIXED)
    {
      if((rdo.FixedVariableRDO.OperatingCurrentIn10mAunits > pdo.SRCFixedPDO.MaxCurrentIn10mAunits)
         || (rdo.FixedVariableRDO.MaxOperatingCurrent10mAunits > pdo.SRCFixedPDO.MaxCurrentIn10mAunits))
      {
        /* Sink requests too much maximum operating current */
        /* USBPD_DPM_EvaluateRequest: Sink requests too much maximum operating current */
        _retr =  USBPD_REJECT;
      }
      else
      {
        /* Save the power object */
        *PtrPowerObject = pdo.GenericPDO.PowerObject;
        /* Set RDO position and requested voltage in DPM port structure */
        DPM_Ports[PortNum].DPM_RequestedVoltage = pdo.SRCFixedPDO.VoltageIn50mVunits * 50;
        DPM_Ports[PortNum].DPM_RDOPositionPrevious = DPM_Ports[PortNum].DPM_RDOPosition;
        DPM_Ports[PortNum].DPM_RDOPosition = rdo.GenericRDO.ObjectPosition;
         _retr = USBPD_ACCEPT;
      }
    }
  }

  return _retr;
/* USER CODE END USBPD_DPM_EvaluateRequest */

Add the following code between the / USER CODE BEGIN-END USBPD_USER_PRIVATE_FUNCTIONS / tags:

/* USER CODE BEGIN USBPD_USER_PRIVATE_FUNCTIONS */
/**
  * @brief  Turn Off power supply.
  * @param  PortNum The current port number
  * @param  Role    Port power role
  * @retval USBPD_OK, USBPD_ERROR
  */
static USBPD_StatusTypeDef DPM_TurnOffPower(uint8_t PortNum, USBPD_PortPowerRole_TypeDef Role)
{
  USBPD_StatusTypeDef status;

  status = USBPD_PWR_IF_VBUSDisable(PortNum);
  return status;
}

/**
  * @brief  Turn On power supply.
  * @param  PortNum The current port number
  * @param  Role    Port power role
  * @retval USBPD_ACCEPT, USBPD_WAIT, USBPD_REJECT
  */
static USBPD_StatusTypeDef DPM_TurnOnPower(uint8_t PortNum, USBPD_PortPowerRole_TypeDef Role)
{
  USBPD_StatusTypeDef status;

  /* Enable the output */
  status = USBPD_PWR_IF_VBUSEnable(PortNum);
  return status;
}
/* USER CODE END USBPD_USER_PRIVATE_FUNCTIONS */
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7879

    瀏覽量

    263728
  • PD
    PD
    +關(guān)注

    關(guān)注

    4

    文章

    458

    瀏覽量

    43889
收藏 人收藏

    評論

    相關(guān)推薦

    USB-PD適配器中常見的拓?fù)?/a>

    本文首先回顧了USB-PD適配器的發(fā)展,并和大家聊一聊USB-PD適配器中常見的拓?fù)?。接著著重介紹ST在快充領(lǐng)域的最新產(chǎn)品和技術(shù)路線。最后我們會以demo板為例,跟大家探討一下USB-PD適配器的技術(shù)細(xì)節(jié)和設(shè)計(jì)時(shí)的注意事項(xiàng)。
    發(fā)表于 08-18 14:18 ?2816次閱讀

    應(yīng)用指南—如何使用DSLogic分析USB-PD信號?

    一 文檔介紹 本文將一步步介紹如何使用DSLogic邏輯分析儀采集和分析 USB-PD 信號。此次將演示使用快充充電器給一臺安卓手機(jī)充電。 二 需要測量哪幾個信號 邏輯分析儀需要測量 CC1 信號
    的頭像 發(fā)表于 09-04 14:42 ?1243次閱讀
    應(yīng)用指南—如何使用DSLogic分析<b class='flag-5'>USB-PD</b>信號?

    USB-Pd Type-C連接器是改變游戲規(guī)則的嗎?

    隨著今年早些時(shí)候推出USB-Pd規(guī)范,它已經(jīng)擴(kuò)展了USB電纜的功能,現(xiàn)在可以為各種設(shè)備提供高功率。提供5W~10W功率的現(xiàn)有解決方案現(xiàn)在可以利用這項(xiàng)技術(shù)進(jìn)行擴(kuò)展,最高可提供100W功率。這使OEM
    發(fā)表于 10-12 08:52

    USB-PD實(shí)現(xiàn)中大功率USB充電應(yīng)用

    通用序列匯流排電力傳輸(USB-PD)標(biāo)準(zhǔn)演變,將掀起新一波USB應(yīng)用革命。USB在資料傳輸方面早已成為業(yè)界普遍採用的標(biāo)準(zhǔn)協(xié)定,而隨著更高傳輸速率的USB 3.0規(guī)格問世,更進(jìn)一步增進(jìn)
    發(fā)表于 06-04 05:00

    PD 快充是什么?一篇文章帶你了解USB-PD快充協(xié)議

    前言  說起 USB-PD 協(xié)議,全名 USB Power Delivery ,可能對于很多人來說還很陌生,但是目前越來越多的手機(jī)已經(jīng)開始支持這一協(xié)議并用來做為設(shè)備快速充電的功能?! ∩杂辛私獾娜?/div>
    發(fā)表于 08-27 09:50

    目前主流的快充協(xié)議USB-PD介紹

    USB-PD 是由 USB-IF 組織制定的一種快速充電規(guī)范,是目前主流的快充協(xié)議之一。 USB-PD 快充協(xié)議是以 Type-C 接口輸出的,但不能說有 Type-C 接口就一定支持 USB
    發(fā)表于 10-28 08:55

    基于USB Type-C的一種電源供電標(biāo)準(zhǔn)USB-PD

    USB-PD(Power Delivery)是基于USB Type-C的一種電源供電標(biāo)準(zhǔn),最大供電功率可達(dá)100瓦(W);隨著USB Type-C的普及,越來越多的設(shè)備(手機(jī)、平板、顯示器、工作站
    發(fā)表于 09-14 07:24

    請問從USB-PD端口請求更高電壓最簡單最快的方法是什么

    你好,我正在將 STM32G0B1RE 處理器用作 USB-PD SINK。請問從USB-PD端口請求更高電壓(例如9V或12V)最簡單最快的方法是什么(最好使用CubeMX)?任何人都可以分享最簡單的代碼來從 USB-PD
    發(fā)表于 12-23 06:45

    致遠(yuǎn)電子發(fā)布USB-PD快充測試方案

    USB-PD(Power Delivery)是基于USB Type-C的供電標(biāo)準(zhǔn),最大功率可達(dá)100W。
    發(fā)表于 05-17 09:47 ?16次下載

    致遠(yuǎn)電子發(fā)布 USB-PD 快充測試方案

    USB-PD(Power Delivery)是基于USB Type-C的供電標(biāo)準(zhǔn),最大功率可達(dá)100W。雖然USB-PD快充越來越熱,但行業(yè)內(nèi)并沒有針對快充的測試工具,ZLG致遠(yuǎn)電子正式發(fā)布U
    發(fā)表于 05-17 18:10 ?4486次閱讀
    致遠(yuǎn)電子發(fā)布 <b class='flag-5'>USB-PD</b> 快充測試方案

    什么是USB-PD?

    文章來源于:線纜小編TypeC情報(bào)中心 我們可以通過多種方式為手機(jī)充電,USB-PD是其中之一。實(shí)際上,目前所有高端的Android手機(jī)都開始使用這種快速充電技術(shù),最近華為的MATE30系列和小米
    的頭像 發(fā)表于 10-11 09:40 ?3.6w次閱讀
    什么是<b class='flag-5'>USB-PD</b>?

    USB-PD 3.0及高壓快充協(xié)議管理控制器說明書

    USB-PD 3.0及高壓快充協(xié)議管理控制器說明書
    發(fā)表于 10-22 15:55 ?41次下載

    如何使用STM32CubeMX構(gòu)建簡單的USB-PD接收器應(yīng)用程序

    如何使用STM32CubeMX構(gòu)建簡單的USB-PD接收器應(yīng)用程序
    發(fā)表于 11-21 17:07 ?8次下載
    如何使用STM32CubeMX構(gòu)建簡單的<b class='flag-5'>USB-PD</b>接收器應(yīng)用程序

    如何使用DSLogic分析USB-PD信號?

    一文檔介紹本文將一步步介紹如何使用DSLogic邏輯分析儀采集和分析USB-PD信號。此次將演示使用快充充電器給一臺安卓手機(jī)充電。二需要測量哪幾個信號邏輯分析儀需要測量CC1信號,兩設(shè)備協(xié)商后
    的頭像 發(fā)表于 01-12 14:09 ?983次閱讀
    如何使用DSLogic分析<b class='flag-5'>USB-PD</b>信號?

    USB Type-C與USB-PD技術(shù)對比

    本篇文章主要詳述 24P、16P 與 6P USB-TypeC接口的引腳定義,以及USB-PD、USB接口類型,以便廣大讀者在進(jìn)行硬件設(shè)計(jì)時(shí)提供參考依據(jù)。
    發(fā)表于 01-26 12:23 ?2491次閱讀
    <b class='flag-5'>USB</b> Type-C與<b class='flag-5'>USB-PD</b>技術(shù)對比