工具与软件:
大家好!
我不熟悉 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 会亮起、这表示正在接收一些数据、因此我不确定要从这里执行什么操作。
如有任何建议、将不胜感激。