This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5510:USB CDC 在主机上打开端口后立即发送数据

Guru**** 2610895 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/810918/msp430f5510-usb-cdc-send-data-as-soon-as-port-has-been-opened-on-host

器件型号:MSP430F5510

Hallo 大家、

我正在尝试实现与所参考线程相同的效果。

主机 PC 打开 MSP 的端口后、我想发送一些数据。

我无法从 。 如何继续?

在 USBCdc.c 中、我有这个函数。

void usbSetControlLineState (void)
{
USBCDC_handleSetControlLineState ((uint8_t) tSetupPacket.Windex、
(uint8_t) tSetupPacket.wValue);
usbSendZeroLengthPacketOnIEP0(); //发送状态阶段的 ZLP
} 

那么、我必须根据 tSetupPacket.wValue 和0x01设置一个变量;在该函数中?

并在 main usbSetControlLineState()中调用该函数?

之后、我可以在 IF 中发送数据、并将变量作为条件?

提前感谢您

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已指派 MSP 团队成员审核您的问题。 请稍后回复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yannik、

    我们提供了适用于 MSP430的 USB 开发套件、您可以在其中获取有关如何创建代码的编程人员指南。

    http://dev.ti.com/tirex/explore/node?node=ALU3cM-tEnLiutYtes7CuA__IOGqZri__LATEST

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wei、

    感谢您的回答、

    是的、我通读了本文档、我的代码 已经可以与 MSP430进行通信。

    但我想对主机的端口打开事件做出反应。

    器件端提供 DTR 信令、以了解 PC 应用程序何时打开/关闭 COM 端口的时序。

    超级终端在启动时将 DTR 设置为1、在退出时将 DTR 设置为0。

    DTR 信令通过 SET_Control_Line_State 请求传递到器件。

    当您的定制 usbSetControlLineState()被堆栈调用时,DTR 信令(0或1)被保持在(byte) tSetupPacket.wValue 的位0上。

    当尝试根据 tSetupPacket.wValue & 0x01设置变量时

    该变量没有值、将鼠标悬停在 tSetupPacket 上会显示以下 img。


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yannik、

    很抱歉耽误你的答复。

    请参阅以下主题、该主题可能会为您提供有关"错误:无法从非基元位置加载"的建议。

    https://e2e.ti.com/support/tools/ccs/f/81/p/3325/141182

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复、

    我用某种方式解决了它、现在它可以与 PuTTy (流控制设置为 none 或 XON/XOFF)一起工作

    静态 uint8_t detectopenport=0;
    uint8_t usbSetControlLineState (void)
    {
    detectopenport=tSetupPackage.wValue & 0x01;
    USBCDC_handleSetControlLineState ((uint8_t) tSetupPackage.windex、
    (uint8_t) tSetupPacket.wValue);
    usbSendZeroLengthPacketOnIEP0();
    返回(false);
    }
    
    
    uint8_t USBCDC_getDTRstate (void)
    {
    返回检测端口
    ;} 

    在 main.c 中(需要"firstprint"、因为只要端口打开、Putty 似乎就会保持"detectopenport"为 true)

    switch (USB_getConnectionState()){
    案例 ST_ENUM_ACTIVE:{
    static uint16_t firstprint=0;
    if (USBCDC_getDTRstate ()&&(firstprint=0))
    {
    //要打印的数据
    firstprint = 1;
    }
    如果(!USBCDC_getDTRstate())
    {firstprint=0;
    }