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.8054万M:SCI通信问题

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/576080/tms320f28054m-sci-communication-problem

部件号:TMS320F2.8054万M

您好,TI:

我正在处理从f2.8054万M到f2.8054万M的sci通信

在软件中,我将F2.8054万M GPIO28设置为RX,将GPIO29设置为TX

我从一个到另一个交叉有线RX---> TX和TX--->RX。

但是,我不能让他们相互通信。

然后,我做了以下更改以使它们实际工作,这会使我更加困惑:

在软件中,我将其中一个GPIO设置为

GPIO28至TX

GPIO29至RX

另一个AS:

GPIO28至RX

GPIO29至TX

然后它就能工作! 但我不明白。

我仔细检查我的硬件连接,我很肯定我连接了RX->TX和TX -->RX。

有人知道为什么会发生这种情况吗?

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

    浙江

    您能否使用示波器检查 TX或RX引脚上是否出现任何问题?

    其次,您能否为我提供两种设备的GPIO配置?

    此致,
    科迪

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

    以下是我的GPIO设置:

    // SCI-RX
    GPIO_setMode(obj->gpioHandle,gPIO_NUMBER_28,gPIO_28_Mode_SCIRXDA); //为SCIRXDA操作
    配置GPIO28 GPIO _setPullup(obj->gpioHandle,gPIO_NUMBER_28,gPIO_Pullup_Enable); //启用上拉GPIO28
    GPIO _setQualification (obj->gpioHandle,GPIO编号_28,GPIO _Qual_Async);//将GPIO28配置为异步输入
    
    // SCI-OBJ TX_setMode
    (GPIO ->gPIOHandle,GPIO编号_29,GPIO _29_Mode_SCITXDA); //为SCITXDA操作
    配置GPIO29 GPIO _setPullup(obj->gpioHandle,gPIO_NUMBER_29,gPIO_Pullup_Enable); //启用上拉GPIO28 

    如果按上述方式设置F2.8054万M,它将不会按预期工作,但当我将数据从一个传输到另一个时,我确实得到了值,但 我发送的数据不正确。

    但如果我将其中一个GPIO设置为以下值:

    // SCI-RX
    GPIO_setMode(obj->gpioHandle,gPIO_NUMBER_29,gPIO_29_Mode_SCIRXDA); //为SCIRXDA操作
    配置GPIO29 GPIO _setPullup(obj->gpioHandle,GPIO编号_29,GPIO_Pullup_Enable); //启用上拉GPIO29
    GPIO _setQualification (obj->gpioHandle, gPIO_NUMBER_29, gPIO_Qual_Async);//将GPIO29配置为异步输入
    
    // SCI-OBJ TX_setMode(GPIO->gPIOHandle,
    gPIO_NUMBER_28, gPIO_28_Mode_SCITXDA); //为SCITXDA操作配置GPIO28
    GPIO _setPullup(obj->gpioHandle,gPIO_NUMBER_28,gPIO_Pullup_Enable); //启用上拉GPIO28 

    我可以获得正确的值,但不能立即响应,我必须重新启动调试模式,然后在再次启动调试模式时可以读取正确的值。

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

    浙江

    首先,如果你还没有建立一个共同的基础,这是一个好主意。

    第二,您是从示例项目开始的吗? 如果是,您 可以检查哪个选项是否启用了内部回送? 有一个位(SCICCR.LOOPBACKENA)在内部将SCIx Rx连接到SCIx Tx,如果您在外部将信号驱动到引脚 ,并在内部将Rx连接到Tx,则可能会获得错误数据。

    如果有任何问题,请告诉我!

    此致,
    科迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发现这是CLK问题。 我正在F2.8054万M中使用外部clk馈电,外部clk频率为15MHz。
    在哪里可以设置系统clk频率以与外部clk频率匹配?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    浙江

    计时树可能非常复杂,在 技术参考手册 (TRM)的第1.2 节中有介绍。

    注:LSPCLK是SCI模块的驱动器。 一些有用的寄存器将是PLLCR和PLLSTS,您可以在同一TRM中找到这些寄存器的说明。

    如果您想检查时钟速度,可以使用XCLKOUT在  引脚上调出时钟进行观察,这 在1.2 2.7 的章节中有介绍。

    此致,
    科迪