如何创建 USB-PD 接收设备(下)

描述

6配置屏蔽的跳线

如图所示,将跳线放在 X-NUCLEO-SNK1M1 屏蔽上。

PD

如果您改用 X-NUCLEO-USBPDM1 扩展板,请遵循以下配置:

PD

7编译并运行应用程序

编译必须在没有错误或警告的情况下执行。

通过单击

PD

按钮(或选择Project/Build Project)来构建应用程序。

通过单击

PD

按钮运行应用程序(或选择运行/运行)

8建立第一个显性契约

在电路板上运行您的应用程序后,启动 STM32CubeMonitor-UCPD 应用程序。点击“Refresh list of connected boards”时,用户的板子必须出现在列表中,所以双击相应的行(或单击“NEXT”)。

PD

注意:ComPort 可能不同。这取决于计算机上安装的板卡数量。 然后双击所需的 UCPD 端口,此处为端口 0,或选择它并单击“下一步”。

PD

单击右下角的TRACES按钮以获取协议跟踪。然后,您可以将供电电源插入 X-NUCLEO-SKN1M1 防护罩的 USB Type-C® 插座。屏幕可能如下所示:

PD

上图显示了 STM32G0 与右侧面板上的供电电源之间的通信。可以验证正确的顺序以达成明确的合同:

功能由源发送(IN 绿色消息)。

请求由STM32G0发送(OUT橙色信息)。

ACCEPT和PS_RDY由源发送(IN 绿色消息)。

合同协商以POWER_EXPLICIT_CONTRACT通知(蓝色消息)结束。

有关如何使用此工具的更多详细信息,请参阅UM2468。有关协议的更多详细信息,请参阅UM2552。请注意,此跟踪对于调试和应用程序开发非常有帮助。

9 [可选] 高级 USB-PD 应用程序

PD

警告

此部分是可选的,针对想要从源中选择特定 PDO 的用户。在参考本节之前,需要先完成 wiki 的第一部分。

从这一点开始,您构建了最简单的接收器,它不处理接收器和源 PDO 的匹配。这必须通过用户代码来完成。这是在 USBPD_DPM_SNK_EvaluateCapabilities 函数中完成的。目前,这个函数只是请求第一个可用的源 PDO,即 5V。

要选择特定的 PDO(例如 9V),您必须选择相应的源 PDO 编号。这可以通过与先前在 STM32CubeMX 中定义的接收器 PDO 以及相应的可用源 PDO 相匹配的用户代码来完成。

本节提供了该系统可能实现的代码。

你需要:

在STM32CubeMX中添加所有你想支持的sink PDO

在您的应用程序中添加下面提供的用户代码

9.1添加支持的sink PDO ↑

重新打开 STM32CubeMX 视图。在Middleware部分,对于USBPD中间件,在PDO General Definitions选项卡下,添加您希望接收器支持的 PDO 数量。对于此示例,我们定义了 3PDO,对应于 5V/1.5A、9V/1.5A 和 15V/1.5A 的简单灌电流配置。这是通过将 PDO 设置为:

0x00019096(固定 PDO:5V 1.5A)

0x0002D096(固定 PDO:9V 1.5A)

0x0004B096(固定 PDO:15V 1.5A)

PD

9.2在GitHub上获取usbpd_user_services.c/h文件↑

通过访问以下链接在 GitHub 上获取 usbpd_user_services.c/h 文件:

- usbpd_user_services.c

- usbpd_user_services.h

将 usbpd_user_services.c/h 文件复制到您的应用程序 USBPD 文件夹中。

然后,为了告诉 STM32CubeMX 在代码生成时包含这些文件,在项目的根文件夹中创建一个名为“.extSettings”的文件(请注意文件名中的点字符)并用以下代码填充它:

[项目文件] 标头路径= [其他] 定义= 哈尔模块= [团体] USBPD=USBPD/usbpd_user_services.c

9.3 usbpd_dpm_user.c中修改↑

在/* USER CODE BEGIN-END Includes */标签之间添加以下代码:

/* 用户代码开始包括 */ #include “usbpd_user_services.h” /* 用户代码结束包括 */

在开关中的/* USER CODE BEGIN-END USBPD_DPM_SetDataInfo */标签 之间添加以下代码:

/* Case Received Source PDO values 数据信息 : */ case USBPD_CORE_DATATYPE_RCV_SRC_PDO : /*!《 Storage of Received Source PDO values */ USBPD_USER_SERV_StoreSRCPDO ( PortNum , Ptr , Size ); 打破;

在/* USER CODE BEGIN-END USBPD_DPM_SNK_EvaluateCapabilities */标签之间添加以下代码(替换之前添加的代码):

/* 用户代码开始 USBPD_DPM_SNK_EvaluateCapabilities */ USBPD_USER_SERV_EvaluateCapa ( PortNum , PtrRequestData , PtrPowerObjectType ); /* 用户代码结束 USBPD_DPM_SNK_EvaluateCapabilities */

您现在可以重新生成代码,构建并运行它。您的应用要求匹配 PDO 的最高电压(源和吸收支持的电压/电流)。

您可以进一步修改此用户代码,例如选择最高功率的 PDO 而不是最高电压。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分