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.

[参考译文] CCS/TMS320F28377S:CCS/TMS320F28377S:

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/930909/ccs-tms320f28377s-ccs-tms320f28377s

器件型号:TMS320F28377S
Thread 中讨论的其他器件: controlSUITEC2000WARE

工具/软件:Code Composer Studio

大家好、e2e 团队。

我正在尝试通过 USB UART TTL 从 MCU TMS320F28377S 向 PC 发送数据。 这是我的设置系统:

我使用 Hercules 软件从 MCU 读取和写入数据。 我配置了 COM3 = USB UART、数据大小= 8、波特率= 9600。

我进入示例  sci_echoback (\ti\controlSUITE\device_support\F2837xS\V210\F2837xS_examples_cpu1\sci_echoback\CPU)。 然后、我编辑了配置 GPIO 的代码:

GPIO_SetupPinMux (90、GPIO_MUX_CPU1、6);
GPIO_SetupPinOptions (90、GPIO_INPUT、GPIO_PushPull);
GPIO_SetupPinMux (89、GPIO_MUX_CPU1、6);
GPIO_SetupPinOptions (89、GPIO_OUTPUT、GPIO_异 步);

但是当我尝试从 Hercules 发送数据时、没有发生任何情况: LoopCount = 0、 程序在第164行停止: while (SciaRegs.SCIFFRX.bit.RXFFST = 0){}。

请帮助我通过 USB UART 从 MCU 向 PC 发送数据。

谢谢你。

这是我的完整 main.c:

//######################################################################################################################
//
//文件:example_2837xSSci_Echoback.c
//
//标题:SCI 回送。
//
//! addtogroup cpu01_example_list
//!

SCI 回送(sci_echoback)


//!
//! 此测试通过 SCI-A 端口接收和回波数据。
//!
//! PC 应用程序“超级终端”或其它终端
//! 例如"putty"可用于查看来自 SCI 和的数据
//! 以向 SCI 发送信息。 接收到的字符
//! 将被发送回主机。
//!
//! b 正在运行\b 应用程序
//! -#配置超级终端或其它终端、如 PuTTy:
//!
//! 对于超级终端、您可以使用随附的超级终端配置
//! 文件 SCI_96.HT。
//! 超级终端中加载此配置
//! -#打开超级终端
//! -#转至文件->打开
//! -#浏览至项目位置和
//! 选择 SCI_96.HT 文件。
//! -#检查 COM 端口。
//! 当前已为 COM1设置配置文件。
//! 如果不正确,请断开连接(呼叫->断开连接)
//! 打开"File-Properties"对话框并选择正确的 COM 端口。
//! -#连接超级终端呼叫->呼叫
//! 然后开始2837xS SCI 回送程序执行。
//! -#该程序将打印一条问候语,然后请您回答
//! 输入一个字符、它将回显到超级终端。
//!
//! 注意:如果无法打开.HT 文件,或者您正在使用
//! 另一个终端、您可以使用以下设置打开 COM 端口
//! -找到正确的 COM 端口
//! -每秒位数= 9600
//! -日期位= 8
//! -奇偶校验=无
//! -停止位= 1
//! -硬件控制=无
//!
//! b 监视\b 变量\n
//! - LoopCount -发送的字符数
//!
//! b 外部连接\n
//! 通过收发器和电缆将 SCI-A 端口连接到 PC。
//! - GPIO28为 SCI_A-RXD (连接到串行 DB9电缆的引脚3、PC-TX)
//! - GPIO29为 SCI_A-TXD (通过串行 DB9电缆连接到 PIN2、PC-RX)
//!
//
//######################################################################################################################
//$TI 版本:F2837xS 支持库 V200 $
//$Release Date:Tue Jun 21 13:52:16 CDT 2016 $
//版权所有:版权所有(C) 2014-2016 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//######################################################################################################################

//
//包含的文件
//
#include "F28x_Project.h"

//
//全局
//
uint16环计数;

//
//函数原型
//
void scia_echoback_init (void);
void scia_fifo_init (void);
void scia_xmit (int a);
void scia_msg (char * msg);

//
//主函
//
void main (void)

uint16 ReceivedChar;
char *msg;

//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2837xS_SYSCTRL.c 文件中。
//
InitSysCtrl();

//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xS_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
InitGpio();

//
//对于这个示例、只初始化针对 SCI-A 端口的引脚。
// GPIO_SetupPinMux ()-设置 GPxMUX1/2和 GPyMUX1/2寄存器位
// GPIO_SetupPinOptions ()-设置 GPIO 的方向和配置
//这些函数可在 F2837xS_GPIO.c 文件中找到。
//
GPIO_SetupPinMux (90、GPIO_MUX_CPU1、6);
GPIO_SetupPinOptions (90、GPIO_INPUT、GPIO_PushPull);
GPIO_SetupPinMux (89、GPIO_MUX_CPU1、6);
GPIO_SetupPinOptions (89、GPIO_OUTPUT、GPIO_异 步);

//
//步骤3. 清除所有_interrupts 并初始化 PIE 矢量表:
//禁用 CPU __interrupts
//
Dint;

//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE __interrupts 和标志
//被清除。
//此函数位于 F2837xS_PIECTRL.c 文件中。
//
InitPieCtrl();

//
//禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
//
IER = 0x0000;
IFR = 0x0000;

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是__interrupt
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xS_PieVect.c 中找到
//
InitPieVectTable();

//
//步骤4. 用户特定代码:
//
LoopCount = 0;

scia_fifo_init();//初始化 SCI FIFO
scia_echoback_init ();//初始化用于 echoback 的 SCI

MSG ="\r\n\n\nHello World!\0";
scia_msg (msg);

MSG ="\r\n 您将输入一个字符,DSP 将回显它! \n\n";
scia_msg (msg);

for (;;)

MSG ="\r\n 输入字符:\0";
scia_msg (msg);

//
//等待 inc 字符
//
while (SciaRegs.SCIFFRX.bit.RXFFST ==0){}//等待空状态

//
//获取字符
//
ReceivedChar = SciaRegs.SCIRXBUF.ALL;

//
//回显字符
//
MSG ="您已发送:\0";
scia_msg (msg);
scia_xmit (ReceivedChar);

LoopCount++;

//
// scia_echoback_init -测试1、SCIA DLB、8位字、波特率0x000F、
//默认,1个停止位,无奇偶校验
//
void scia_echoback_init ()

//
//注意:SCIA 外设的时钟被打开
//在 InitSysCtrl()函数中
//

SciaRegs.SCICCR.all = 0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;

//
// SCIA 为9600波特
//@LSPCLK = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。
//@LSPCLK = 30MHz (120MHz SYSCLK) HBAUD = 0x01且 LBAUD = 0x86。
//
SciaRegs.SCIHBAUD.ALL = 0x0002;
SciaRegs.SCILBAUD.ALL = 0x008B;

SciaRegs.SCICTL1.all = 0x0023;//从复位中撤回 SCI

//
// scia_xmit -从 SCI 发送一个字符
//
void scia_xmit (int a)

while (SciaRegs.SCIFFTX.bit.TXFFST!= 0){}
SciaRegs.SCITXBUF.ALL =A;

//
// scia_msg -通过 SCIA 发送消息
//
void scia_msg (char * msg)

int i;
I = 0;
while (msg[i]!='\0')

scia_xmit (msg[i]);
i++;

//
// scia_fifo_init -初始化 SCI FIFO
//
void scia_fifo_init()

SciaRegs.SCIFFTX.ALL = 0xE040;
SciaRegs.SCIFFRX.ALL = 0x2044;
SciaRegs.SCIFFCT.all = 0x0;

//
//文件结束
//

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

    您好!

    感谢您的提问! 从 UART TTL 连接收到的数据实际上不会发送到 F2837xs 的可能性很高。

    您是否能够使用逻辑分析仪/示波器监控 F2837xs 的 RX 引脚并在此处提供波形的屏幕截图? 这将极大地帮助缩小通信误差源的范围。

    谢谢!

    Vince

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

    先生、我的 USB UART 成功发送了数据"Hello 1"。 LED TX 闪烁。

    e2e.ti.com/.../video_2D00_1597285964.mp4

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

    您好!

    感谢您的后续回复。 当 LED 可能闪烁时、通过对引脚进行示波器捕获来确认 C2000器件 RX 引脚的波形质量将是有益的。 如果可以、这将排除任何降级信号问题、上拉/下拉问题、噪声问题和振幅问题。 此外、如果您可以比较 TX 和 RX 数据线、则可以确保波特率不存在不匹配。

    同时、需要尝试以下两种方法:

    请确保您确实使用的是50MHz 的 LSPCLK。 如果这不是正确的 LSPCLK、则通信将不会正确链接。

    2.尝试最新的 C2000Ware 示例(sci_ex3_echoback.c)可能会有所帮助、该示例具有一些明确的函数名称、可以更清楚地说明问题的根源所在。 此外、第139行至148行上的函数(例如 SCI_resetChannels (SCIA_BASE))可以清楚地了解 SCI 正常工作所需的清除/准备工作。

    此致、

    Vince