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.

[参考译文] TMS320F2.8027万:如何使用SPI

Guru**** 2524550 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/655436/tms320f28027-how-to-use-spi

部件号:TMS320F2.8027万
主题:controlSUITE中讨论的其他部件

大家好,我在SPI工作方面没有很好的经验。 我有一个与Arduino和ADXL355传感器一起的项目。 我使用了Arduino SPI库。 来自ADXL355数据表from datasheet

要访问ID寄存器,寄存器地址将向左移动1,ORed向左移动1。 然后发送ID。 这是否正确?

是16位接口还是8位接口? 当我使用Adapted从SPI中尝试此代码时,来自controlSUITE的no interrupt示例:

sdata = 0x01;
SPI_WRITE (mySpi,sdata);

while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
{
}
RDATA = SPI_Read(mySpi); 

RDATA为1。

如果更改

SPI_setCharLength (mySpi, SPI_CharLength_16_Bits);

SPI_setCharLength (mySpi, SPI_CharLength_8_Bits);

并且使sdata和RDATA uint8_t,RDATA是0x100调试器,这是没有意义的,因为它是8位。 我做错了什么?

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

    查看您共享的时序图,SPI看起来配置为8位配置。 这意味着您需要将C2000器件中的SPI配置为8位。 此外,您还需要确保波特率和时钟极性也匹配。
    我不理解RDATA变量如何被读取为0x100,因为RDATA变量本身是uint8类型。 此外,由于已将SPI的数据长度更改为8,因此最好使用0xFF来屏蔽接收到的数据。
    您是否还可以检查SPI模块中的RXBUF寄存器并查看是否正确接收数据?

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

    使用此代码:

    uINT8_t sdata;//发送数据
    uint8_t RDATA;//接收到的数据
    uint8_t SPIRXContents;
    
    //...
    
    sdata = 0x01;
    SPI_WRITE (mySpi,sdata);
    
    while (SPI_getRxFifoStatus (mySpi)==
    
    
    Contents _FifoStatus_Empty){}SPATA =(SPI_SPIf; SPI?/0xIRF) SPIf; SPIf; SPIf; SPI=(SPI_READ = SPI=( SPI=0xIRF) SPIf) SPIf; SPI=( SPIf) 

    RDATA为0,SPIRXContents为200 (0xC8)

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

    从到ADX355数据表:

    基于以下帖子:  https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/319066 和31.9066万和 TMS320x2802x SPI指南:

    SpiaRegs.SPICCR.ALL =0x0007;
    SpiaRegs.SPICTL.ALL =0x0006;
    SpiaRegs.SPICCR.ALL =0x0087;

    返回与以前相同的结果。

      

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

    您好,

    您能否向我们提供有关您发送的数据以及预期数据的更多详细信息?

    我希望您知道SPI是一种全双工协议。 SPI传输始终伴随接收。

    当您通过SPI发送命令时,响应不应是此事务的一部分。 您需要启动另一个SPI事务(您可以发送一些虚拟数据)以从机获得实际响应。

    我相信您的代码是在One SPI发送后立即读取RX BUF寄存器。 我认为您应该遵循以下顺序:

    • 发送命令至从属设备
    • 对RXBUF执行虚拟读取(从属设备可能会使用一些虚拟数据进行响应)
    • 发送一些虚拟数据(以获取实际响应)
    • 阅读RXBUF了解实际响应。

    谢谢,此致,

    Veena

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

    感谢Veena的帮助。

    我正在尝试访问地址为0x00的设备的ID寄存器。 根据传感器数据表,它期望地址向左移动,LSB为RW位。 因此发送的数据是0x01以读取设备ID寄存器。  

    以下操作仍不起作用:

    sdata = 0x01;
    SPI_WRITE (mySpi,sdata);
    
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    sdata = 0x00;//虚拟数据
    SPI_WRITE (mySpi,sdata);
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    RDATA =(SPI_READ (mySpi)和0xff); 

    我是SPI和C2000的新用户,感谢您的帮助。

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

    我目前没有这样的设置来进行实验。 但是看一下您的代码片段,我看不到在第一个事务之后从RX缓冲区读取的信息。 是否可以在第一次等待后和第二次写入之前尝试添加SPI读取

    sdata = 0x01;
    SPI_WRITE (mySpi,sdata);


    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)

    }
    <---- 在此处添加虚拟SPI

    sdata = 0x00;//虚拟数据
    SPI_WRITE (mySpi,sdata);
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)

    }
    RDATA =(SPI_READ (mySpi)和0xff);


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

    您好,Veena。

    仍然不工作。

    完整代码:

    //#######################################################################
    //
    //文件:example_F2802xSpi_FDLB.c
    ////
    标题:F2802x器件SPI数字环回程序。
    ////
    ! \addtogroup example_list
    //! <H1>SPI数字回路</H1>//!
    
    //! 此程序是一个SPI示例,它使用
    //! 外围设备。 不使用中断。
    //!
    //! 发送数据流,然后与接收的数据流进行比较。
    //!
    //! 发送的数据如下所示:
    //! 0000 0001 0002 0003 0004 0005 0006 0007.... FFFE FFFF
    //!
    //! 这种模式将永远重复。
    //!
    //! 监视变量:
    //! - sdata -已发送数据
    //! -RDATA-已接收数据
    ////###################################################################################################################################################################################################################
    
    //$TI发布:F2802x支持库v230 $//
    发布日期:星期五5月8日07:43:05 CDT 2015 $//
    $版权:版权所有(C) 2008-2015 Texas2015 Texas Instruments Incorporated -//
                http://www.ti.com/ 保留所有权利$//#########################################################################################
    
    
    #include "DSP28x_Project.h" //设备标题文件和示例包括文件
    
    #include "F2802x_common/include/adc.h"
    #include "F2802x_common/include/clk.h"
    #include "F2802x_common/include/flash.h"
    #include "f2802x_common/include/gpio .h/spi"
    #include "f280h/f280h/f280h/spdog"
    
    
    
    
    的常见函数"include/f280_f2x_f2x_f280h/f280h/f"#include "f280h/f2x_common
    //中断void ISRTimer2(void);
    void delay_loop(void);
    void SPI_xmit(uint16_t A);
    void SPI_fifo_init(void);
    void SPI_init(void);
    void错误(void);
    
    adc_handle myAdc;
    clk_handle myClk;
    flash_handle myFlash;
    gpio_handle myGpio;
    PIE_HANDLE myPIE;
    SPI_HANDLE mySpi;
    
    uint8_t sdata;//发送数据
    uint8_t RDATA;//接收的数据
    uint8_t SPIRXContents;
    
    void main (void)
    {
    
    cpu_handle myCpu;
    PLL_HANDLE myPll;
    WDOG_Handle myWDog;
    
    //初始化此应用程序所需的所有句柄
    myAdc = adc_init((void *)adc_base_addr, sizeof(ADC_Obj);
    myClk = clk_init((void *)clk_base_addr, sizeof(clk_obj));
    myCpu = CPU_INIT ((void *) NULL,sizeof (CPU_Obj));
    myFlash = flash_init((void *)flash_base_addr, sizeof(flash_Obj));
    myGpio = gPIO_INIT ((void *) gPIO_BASE ADDR,sizeof (gPIO_Obj));
    myPie = PIE_INIT ((void *) PIE_base_ADDR,sizeof (PIE_Obj));
    myPll = PLL_INIT ((void *) PLL_base_ADDR,sizeof (PLL_Obj));
    mySpi = SPI_init((void *)SPIA_base_ADDR, sizeof(SPI_Obj);
    myWDog = WDOG_INIT ((void *) WDOG_base_ADDR,sizeof (WDOG_Obj));
    
    //执行基本系统初始化
    WDOG_DISABLE (myWDog);
    clk_enableAdcClock(myClk);
    (*Device_cal)();
    
    //选择内部振荡器1作为时钟源
    CLK_setOscSrc (myClk,CLK_OscSrc_Internal);
    
    //为x10 /2设置PLL,其输出频率为50MHz =10MHz *10/ 2
    PLL_setup (myPll,PLL_Multiplier_10,PLL_DivideSelect_CLKIN_BY_2);
    
    //禁用PIE和所有中断
    PIE_DISABLE (myPie);
    PIE_DisableAllInts(myPie);
    CPU_disableGlobalInts (myCpu);
    CPU_clearIntFlags (myCpu);
    
    //如果从闪存运行,则复制RAM仅对RAM
    #ifdef _flash起作用
    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
    #endif
    
    //初始化GPIO
    GPIO设置上拉(myGpio,GPIO编号_16,GPIO _上拉_启用);
    GPIO设置上拉(myGpio,GPIO编号_17,GPIO _上拉_启用);
    GPIO设置上拉(myGpio,GPIO编号_18,GPIO _上拉_启用);
    GPIO设置上拉(myGpio,GPIO编号_19,GPIO _上拉_启用);
    GPIO_setQualification (myGpio,GPIO编号_16,GPIO _Qual_Async);
    GPIO_setQualification (myGpio,GPIO编号_17,GPIO _Qual_Async);
    GPIO_setQualification (myGpio,GPIO编号_18,GPIO _Qual_Async);
    GPIO_setQualification (myGpio,gPIO_NUMBER_19,gPIO_Qual_Async);
    GPIO_setMode (myGpio,GPIO编号_16,GPIO _16_Mode_SPISIMOA);
    GPIO设置模式(myGpio,GPIO编号_17,GPIO _17_Mode_SPISOMIA);
    GPIO设置模式(myGpio,GPIO编号_18,GPIO _18_Mode_SPICLKA);
    GPIO设置模式(myGpio,GPIO编号_19,GPIO _19_Mode_SPISTEA_NOT);
    
    //设置调试向量表并启用PIE
    PIE_setDebugIntVectorTable(myPie);
    PIE_ENABLE (myPie);
    
    SPI_init(); //初始化SPI
    SPI_fifo_init();//初始化SPI FIFO
    
    sdata = 0x01;
    SPI_WRITE (mySpi,sdata);
    
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    RDATA =(SPI_READ (mySpi)和0xff);
    
    sdata = 0x00;//虚拟数据
    SPI_WRITE (mySpi,sdata);
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    RDATA =(SPI_READ (mySpi)和0xff);
    SPIRXContents =(SpiaRegs.SPIRXBUF & 0xff);
    
    while (1);
    }
    
    void delay_loop()
    {
    长 一;
    
    对于(i = 0;i < 100万;I++)
    {
    }
    
    return;
    }
    
    void error (void)
    {
    _ASM (" ESTOP0"); //测试失败!! 停止!
    (;;)
    {
    }
    }
    
    作废SPI_init()
    {
    clk_enableSpiaClock(myClk);
    
    //重置打开,上升边缘,16位字符位
    SPI_setCharLength (mySpi, SPI_CharLength_8_Bits);
    
    //启用主模式,正常相位,
    //启用通话,SPI int禁用。
    SPI_setMode (mySpi,SPI_Mode_Master);
    SPI_enableTx (mySpi);
    
    SPI_setBaudRate (mySpi,SPI_Baudrate_1_MBaud);
    
    //从重置中放弃SPI
    SPI_enableLoopBack (mySpi);
    SPI_enable(mySpi);
    
    //设置断点,使其不会干扰xmission
    SPI_setPriority (mySpi,SPI_Priority_FreeRun);
    
    // SpiaRegs.SPICCR.ALL =0x0007;
    // SpiaRegs.SPICL.ALL =0x0006;
    // SpiaRegs.SPICCR.ALL =0x0087;
    
    return;
    }
    
    void spi_fifo_init()
    {
    //初始化SPI FIFO寄存器
    SPI_enableChannels(mySpi);
    SPI_enableFifoEnh (mySpi);
    SPI_resetTxFifo(mySpi);
    SPI_clearTxFifoInt(mySpi);
    SPI_resetRxFifo(mySpi);
    SPI_clearRxFifoInt(mySpi);
    SPI_setRxFifoIntLevel (mySpi,SPI_FifoLevel,4_剑);
    
    返回; 
    }//===========================================================================================================================================
    
    
    //没有更多。
    //===========================================================================================================================================
    
    

     

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

    在使用少于16位字的C2000 SPI运行时,传输数据必须保持对齐状态。 由于SPI只是一个移位寄存器,它将把MSBit从左移出到传输线路,并将MSBit接收到最右边的位。 有关此概念的详细说明,请参阅《SPI用户指南SPRUG71》中的1.5 Tm2数据格式一节。 当您查看当前情况时,此行为很明显。您将0x01写入SPITXBUF,SPI将开始传输8位。发送8位后,SPIRXBUF将看到0x0100。 该1向左移动了8位,它接收到的数据全部为零。

    正如Veena所说,当您阅读RXBUF时,您将看到16位,但由于您只关心接收到的8位,您将需要屏蔽额外的位。

    总的来说,您的计划流程看起来不错,所以我认为您走的是正确的。

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

    感谢你的帮助。  我现在明白为什么传输数据必须保持合理性。 作为健全性检查,我使用Arduino获取数据,并在SOMI连接到SIMO的情况下运行环回程序,然后两者都签出。

    我注释掉 SPI_enableLoopBack()。 所有返回的内容都是0xff。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢Veena的帮助。
    Mark关于传输数据保持对齐的回复很有帮助。 我通过使用Arduino获取数据并在连接了SOMI和SIMO的情况下运行环回程序来运行健全性检查,然后他们进行了检查。

    我还注释了spi_enableLoopBack()。 所有返回的内容都是0xff
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此代码不应该有效吗?

    sdata = 0x0100;
    SPI_WRITE (mySpi,sdata);
    
    //等待直到收到数据
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    
    RDATA = SPI_READ (mySpi);
    SPI_WRITE (mySpi,sdata);
    
    //等待直到收到数据
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    
    RDATA =(SPI_READ (mySpi)& 0xff);
    

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

    这看起来会起作用。不是吗?

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

    它使用以下代码。 SPI_setCharLength (mySpi, SPI_CharLength_16_Bits)将电离面设置为16位。 我认为它应该是16,因为ADXL355数据表。 非常感谢您的帮助。

    //#######################################################################
    //$TI发布:F2802x支持库v230 $//
    发布日期:星期五5月8日07:43:05 CDT 2015 $//
    $版权:版权所有(C) 2008-2015 Texas2015 Texas Instruments Incorporated -//
                http://www.ti.com/ 保留所有权利$//#########################################################################################
    
    
    #include "DSP28x_Project.h" //设备标题文件和示例包括文件
    
    #include "F2802x_common/include/adc.h"
    #include "F2802x_common/include/clk.h"
    #include "F2802x_common/include/flash.h"
    #include "f2802x_common/include/gpio .h/spi"
    #include "f280h/f280h/f280h/spdog"
    
    
    
    
    的常见函数"include/f280_f2x_f2x_f280h/f280h/f"#include "f280h/f2x_common
    //中断void ISRTimer2(void);
    void delay_loop(void);
    void SPI_xmit(uint16_t A);
    void SPI_fifo_init(void);
    void SPI_init(void);
    void错误(void);
    
    adc_handle myAdc;
    clk_handle myClk;
    flash_handle myFlash;
    gpio_handle myGpio;
    PIE_HANDLE myPIE;
    SPI_HANDLE mySpi;
    
    uint16_t sdata;//发送数据
    uint16_t RDATA;//接收的数据
    
    无效main (void)
    {
    
    cpu_handle myCpu;
    PLL_HANDLE myPll;
    WDOG_Handle myWDog;
    
    //初始化此应用程序所需的所有句柄
    myAdc = adc_init((void *)adc_base_addr, sizeof(ADC_Obj);
    myClk = clk_init((void *)clk_base_addr, sizeof(clk_obj));
    myCpu = CPU_INIT ((void *) NULL,sizeof (CPU_Obj));
    myFlash = flash_init((void *)flash_base_addr, sizeof(flash_Obj));
    myGpio = gPIO_INIT ((void *) gPIO_BASE ADDR,sizeof (gPIO_Obj));
    myPie = PIE_INIT ((void *) PIE_base_ADDR,sizeof (PIE_Obj));
    myPll = PLL_INIT ((void *) PLL_base_ADDR,sizeof (PLL_Obj));
    mySpi = SPI_init((void *)SPIA_base_ADDR, sizeof(SPI_Obj);
    myWDog = WDOG_INIT ((void *) WDOG_base_ADDR,sizeof (WDOG_Obj));
    
    //执行基本系统初始化
    WDOG_DISABLE (myWDog);
    clk_enableAdcClock(myClk);
    (*Device_cal)();
    
    //选择内部振荡器1作为时钟源
    CLK_setOscSrc (myClk,CLK_OscSrc_Internal);
    
    //为x10 /2设置PLL,其输出频率为50MHz =10MHz *10/ 2
    PLL_setup (myPll,PLL_Multiplier_10,PLL_DivideSelect_CLKIN_BY_2);
    
    //禁用PIE和所有中断
    PIE_DISABLE (myPie);
    PIE_DisableAllInts(myPie);
    CPU_disableGlobalInts (myCpu);
    CPU_clearIntFlags (myCpu);
    
    //如果从闪存运行,则复制RAM仅对RAM
    #ifdef _flash起作用
    memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
    #endif
    
    //初始化GPIO
    GPIO设置上拉(myGpio,GPIO编号_16,GPIO _上拉_启用);
    GPIO设置上拉(myGpio,GPIO编号_17,GPIO _上拉_启用);
    GPIO设置上拉(myGpio,GPIO编号_18,GPIO _上拉_启用);
    GPIO设置上拉(myGpio,GPIO编号_19,GPIO _上拉_启用);
    GPIO_setQualification (myGpio,GPIO编号_16,GPIO _Qual_Async);
    GPIO_setQualification (myGpio,GPIO编号_17,GPIO _Qual_Async);
    GPIO_setQualification (myGpio,GPIO编号_18,GPIO _Qual_Async);
    GPIO_setQualification (myGpio,gPIO_NUMBER_19,gPIO_Qual_Async);
    GPIO_setMode (myGpio,GPIO编号_16,GPIO _16_Mode_SPISIMOA);
    GPIO设置模式(myGpio,GPIO编号_17,GPIO _17_Mode_SPISOMIA);
    GPIO设置模式(myGpio,GPIO编号_18,GPIO _18_Mode_SPICLKA);
    GPIO设置模式(myGpio,GPIO编号_19,GPIO _19_Mode_SPISTEA_NOT);
    
    //设置调试向量表并启用PIE
    PIE_setDebugIntVectorTable(myPie);
    PIE_ENABLE (myPie);
    
    SPI_init(); //初始化SPI
    SPI_fifo_init();//初始化SPI FIFO
    
    sdata = 0x0100;
    SPI_WRITE (mySpi,sdata);
    
    //等待直到收到数据
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    
    RDATA = SPI_READ (mySpi);
    SPI_WRITE (mySpi,sdata);
    
    //等待直到收到数据
    while (SPI_getRxFifoStatus (mySpi)== SPI_FifoStatus_Empty)
    {
    }
    
    //对照已发送的数据进行检查
    
    RDATA =(SPI_READ (mySpi)& 0xff);
    
    while (1);
    
    
    }
    
    void delay_loop()
    {
    长 一;
    
    对于(i = 0;i < 100万;I++)
    {
    }
    
    return;
    }
    
    void error (void)
    {
    _ASM (" ESTOP0"); //测试失败!! 停止!
    (;;)
    {
    }
    }
    
    作废SPI_init()
    {
    clk_enableSpiaClock(myClk);
    
    //重置打开,上升边缘,16位字符位
    SPI_setCharLength (mySpi, SPI_CharLength_16_Bits);
    
    //启用主模式,正常相位,
    //启用通话,SPI int禁用。
    SPI_setMode (mySpi,SPI_Mode_Master);
    SPI_enableTx (mySpi);
    
    SPI_setBaudRate (mySpi,SPI_Baudrate_1_MBaud);
    
    //从重置中放弃SPI
    //SPI_enableLoopBack (mySpi);
    SPI_enable(mySpi);
    
    //设置断点,使其不会干扰xmission
    SPI_setPriority (mySpi,SPI_Priority_FreeRun);
    
    return;
    }
    
    void spi_fifo_init()
    {
    //初始化SPI FIFO寄存器
    SPI_enableChannels(mySpi);
    SPI_enableFifoEnh (mySpi);
    SPI_resetTxFifo(mySpi);
    SPI_clearTxFifoInt(mySpi);
    SPI_resetRxFifo(mySpi);
    SPI_clearRxFifoInt(mySpi);
    SPI_setRxFifoIntLevel (mySpi,SPI_FifoLevel,4_剑);
    
    返回;}//============================================================================================
    
    
    
    //没有更多。
    //===========================================================================================================================================
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ray,

    啊,是的,我们都一定忽略了这一点。 我很高兴您能够解决此问题。 如果您将来再次遇到问题,请立即发布。

    此致,
    标记