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.

[参考译文] TMS320F28379D:Echoback 示例程序中输入和输出上的垃圾数据

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1433075/tms320f28379d-garbage-data-on-input-and-output-in-echoback-example-program

器件型号:TMS320F28379D

工具与软件:

大家好!

我不熟悉 TMS320F28379D 微控制器、但在使用 Resource Explorer 中的 Echoback 程序时出现问题。 我曾就与此计划相关的问题咨询过其他论坛帖子、但我似乎不存在相同的问题、我不确定从此处开始在哪里进行。 为了使程序能够运行、我必须将以下 GPIO 寄存器值分别更改为43U 和42U、以匹配初始语句

进行一次此更改后、代码确实在运行、但发送到终端的所有数据都是垃圾。 初始问候消息是垃圾消息、任何输入字符都显示为垃圾消息、回传字符也是垃圾消息。 输入字符是垃圾的事实使我认为 SCIA 寄存器配置有问题、但这只是一个猜测。 我已经发布了以下程序的代码以及所述问题的示例

//############################################################################################################################################################################################
//
//文件:sci_ex3_echoback.c
//
//标题:Sci echoback 示例。
//
//! \addtogroup driver_example_list
//!

SCI 回送


//!
//! 此测试通过 SCI-A 端口接收数据并回送数据。
//!
//! 可以使用"Putty"等终端查看从中获取的数据
//! 和向 SCI 发送信息。 接收的字符数
//! 数据字节都发送回主机。
//!
//! \b 正在运行\b 应用程序
//! 使用终端打开具有以下设置的 COM 端口:
//! -找到正确的 COM 端口
//! -每秒位数=9600
//! -数据位= 8
//! -奇偶校验=无
//! -停止位= 1
//! -硬件控制=无
//!
//! 该程序将打印出问候语、然后询问您
//! 输入一个字符、它会将其回显到终端。
//!
//! \b 观察\b 变量\n
//! - loopCounter -发送的字符数
//!
//! \b 外部连接\n
//! 通过一条 USB 线缆将 SCI-A 端口连接至一个 PC。
//! 有关 UART/USB 连接器的信息、请参阅硬件用户指南。
//
//############################################################################################################################################################################################
//
//
//$Copyright:
//版权所有(C) 2013-2024德州仪器(TI)公司- http://www.ti.com/
//
//以源代码和二进制形式重新分发和使用、无论有无
//修改、但前提是满足以下条件
//已满足:
//
//重新分发源代码必须保留上述版权
//通知、此条件列表和以下免责声明。
//
//以二进制形式重新分发必须复制上述版权
//通知、此条件列表和中的以下免责声明
//随提供的文档和/或其他材料
//分布。
//
//既不是德州仪器(TI)公司的名称、也不是的名称
//其贡献者可用于认可或推广衍生产品
//未经事先书面许可、从本软件中获取。
//
//此软件由版权所有者和贡献者提供
//"按原样"以及任何明示或暗示的保证、包括但不包括
//仅限于对适销性和适用性的暗示保证
//不考虑特定目的。 在任何情况下均不得享有版权
//所有者或贡献者对任何直接、间接、附带、
//特殊、示例性或后果性损害(包括但不包括)
/仅限于采购替代商品或服务;不使用、
//数据或利润;或业务中断)、无论其原因是什么
//责任理论,无论是合同,严格责任,或侵权
//(包括疏忽或其他)以任何方式产生的使用
//此软件、即使被告知此类损坏的可能性。
//$
//############################################################################################################################################################################################

//
//包含的文件
//
#include "driverlib.h"
#include "device.h"

//
//定义
//
//定义自动波特以使用自动波特锁定功能
//#define autobaud (定义自动波特)

//
// Globals (全局变量)
//
uint16_t loopCounter = 0;

//
// Main (主菜单)
//
void main (void)

uint16_t receivedChar;
unsigned char * msg;
uint16_t rxStatus = 0u;

//
//配置 PLL、禁用 WD、启用外设时钟。
//
device_init();

//
//禁用引脚锁定和启用内部上拉。
//
device_initGPIO();

//
// SCI Rx 引脚的配置。
//
GPIO_setMasterCore (DEVICE_GPIO_PIN_SCIRXDA、GPIO_CORE_CPU1);
GPIO_setPinConfig (DEVICE_GPIO_CFG_SCIRXDA);
GPIO_setDirectionMode (DEVICE_GPIO_PIN_SCIRXDA、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SCIRXDA、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SCIRXDA、GPIO_QUAL_ASYNC);

//
// SCI Tx 引脚的配置。
//
GPIO_setMasterCore (DEVICE_GPIO_PIN_SCITXDA、GPIO_CORE_CPU1);
GPIO_setPinConfig (DEVICE_GPIO_CFG_SCITXDA);
GPIO_setDirectionMode (DEVICE_GPIO_PIN_SCITXDA、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SCITXDA、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SCITXDA、GPIO_QUAL_ASYNC);

//
//初始化中断控制器和矢量表。
//
Interrupt_initModule();
interrupt_initVectorTable();

//
//初始化 SCIA 及其 FIFO。
//
SCI_performSoftwareReset (SCIA_BASE);

//
//为回显配置 SCIA。
//
SCI_setConfig (SCIA_BASE、DEVICE_LSPCLK_FREQ、9600、(SCI_CONFIG_WLEN_8 |)
SCI_CONFIG_STOP_ONE |
SCI_CONFIG_PAR_NONE));
SCI_resetChannels (SCIA_BASE);
SCI_resetRxFIFO (SCIA_BASE);
SCI_resetTxFIFO (SCIA_BASE);
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_TXFF | SCI_INT_RXFF);
SCI_enableFIFO (SCIA_BASE);
SCI_enableModule (SCIA_BASE);
SCI_performSoftwareReset (SCIA_BASE);

#ifdef 自动波特率
//
//执行自动波特锁定。
// SCI 需要使用'A'或'A'来锁定波特率。
//
SCI_lockAutobaud (SCIA_BASE);
#endif

//
//发送起始消息。
//
MSG ="\r\n\n\nHello World!\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、17);
MSG ="\r\n 您将输入一个字符、DSP 将回显它!\n\n0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、62);

for (;;)

MSG ="\r\n 输入字符:\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、22);

//
//从 FIFO 中读取一个字符。
//
receivedChar = SCI_readCharBlockingFIFO (SCIA_BASE);

rxStatus = SCI_getRxStatus (SCIA_BASE);
if (((rxStatus 和 SCI_RXSTATUS_ERROR)!= 0)

//
//如果执行在此处停止、则会出现一些错误
//分析 SCI_getRxStatus() API 返回值
//
ESTOP0;
}

//
//回显字符。
//
MSG ="您发送了:\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、13);
SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);

//
//递增循环计数变量。
//
环路计数器++;
}
}

//
//结束文件
//

上图显示在程序中按下空格键时的输入和输出。 当我按键时、板上的 LED 会亮起、这表示正在接收一些数据、因此我不确定要从这里执行什么操作。

如有任何建议、将不胜感激。  

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

    您好、Sam、

    从引脚上看、听起来您正在使用 F28379D Launchpad。 在这种情况下、您需要定义  _LAUNCHXL_F28379D  示例符号。 这可以通过右键点击 Project Explorer 中的工程并转到 Properties -> Build -> Predefined Symbols 来实现。

    该操作可 纠正特定于 LaunchPad 的其他系统级配置。 请告诉我、这是否可以解决您的问题。

    谢谢!

    Arnav

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

    非常感谢! 这完全解决了我的问题。 为什么这到底起作用呢?

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

    进一步到 device.h 文件中、由于不同的 XTAL、Launchpad 和控制卡的时钟配置设置是分开的。 如果没有 Launchpad 设置、SYSCLK 会配置为与预期不同的值、 这 会导致 SCI 波特率不匹配、从而解释您最初看到的垃圾字符。

    此致、

    Arnav