串口输出问题 - TMS320F2837x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5400|回复: 3

[未解决] 串口输出问题

[复制链接]

3

主题

7

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2018-12-17 16:25:11 | 显示全部楼层 |阅读模式
本帖最后由 chendelta 于 2018-12-17 16:26 编辑

28377D 开发板,测试串口输出。main中反复输出 F0CA,通过RS-232转USB输入到PC。接收到的数据部分正确,部分错误。波特率从 1200 到 115200都是如此,用matlab和sscom接收都一样。请问可能的原因是什么?谢谢!

代码如下:
+++++++++
#include "F28x_Project.h"
#include "F2837xD_Ipc_drivers.h"
#include "SciStdio.h"

void SCIInit(void);

#define _STANDALONE
#define _FLASH
#ifdef _FLASH
// 这些定义在 .cmd 文件中
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadSize;
extern Uint16 RamfuncsRunStart;
#endif

void main(void)
{
    Uint16 data_out = 0xF0CA, TX_LO, TX_HI;

// 把分配到 ramfuncs 段中的实时性要求高的关键代码从Flash中拷贝到RAM里执行
// 具体请查看 .cmd 文件
#ifdef _FLASH
  memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif
// 系统初始化,配置PLL,关闭看门狗,使能外设时钟
   InitSysCtrl();

#ifdef _STANDALONE
#ifdef _FLASH
// 发送 boot 命令,允许 CPU2 开始执行应用程序
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
#else
// 发送 boot 命令,允许 CPU2 开始执行应用程序
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM);
#endif
#endif

// 片上 Flash 初始化
#ifdef _FLASH
   InitFlash();
#endif

// 初始化 GPIO
    InitGpio();

    EALLOW;
    GpioCtrlRegs.GPDMUX2.bit.GPIO115 = 0;   // 选择引脚功能为GPIO功能
    GpioCtrlRegs.GPDDIR.bit.GPIO115 = 1;    // 方向为输出
    EDIS;
    GpioDataRegs.GPDDAT.bit.GPIO115 = 1;    // LED

// 关中断
    DINT;
// 初始化Pie控制寄存器
    InitPieCtrl();
// 不使能中断,清中断标志
    IER = 0x0000;
    IFR = 0x0000;
// 初始化中断向量表
    InitPieVectTable();

// 全局中断和实时调试中断
//    EINT;
    ERTM;

    // 初始化串口
    SCIInit();

    while(1)
    {
        TX_LO = data_out & 0x00FF;
        TX_HI = data_out >> 8;
        while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
        SciaRegs.SCITXBUF.all = TX_LO;
        while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
        SciaRegs.SCITXBUF.all = TX_HI;

        DELAY_US(100000);
        GpioDataRegs.GPDDAT.bit.GPIO115 = 0;    // 关闭LED
        DELAY_US(100000);
        GpioDataRegs.GPDDAT.bit.GPIO115 = 1;    // 点亮LED
    }
}


void SCIInit(void)
{
// GPIO
    EALLOW;
    GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
    GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
    EDIS;

//FIFO
    // TX
    SciaRegs.SCIFFTX.all=0xE000;
    // RX
    SciaRegs.SCIFFRX.all=0x2000;
    // FIFO TX delay
    SciaRegs.SCIFFCT.all=0x0;

// Stop bit, Parity
        SciaRegs.SCICCR.all =0x0007;

// disable TX, RX
        SciaRegs.SCICTL1.all =0x0003;
// interrupt
        SciaRegs.SCICTL2.all =0x0000;
// baud rate
        SciaRegs.SCIHBAUD.all =0x0000;
        SciaRegs.SCILBAUD.all =0x0035;
// enable TX, RX
        SciaRegs.SCICTL1.all =0x0023;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

4

主题

188

帖子

1698

积分

禁止发言

积分
1698
发表于 2018-12-17 17:12:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

3

主题

7

帖子

73

积分

注册会员

Rank: 2

积分
73
 楼主| 发表于 2018-12-25 15:03:17 | 显示全部楼层
本帖最后由 chendelta 于 2018-12-25 15:15 编辑
tronlong-gxd 发表于 2018-12-17 17:12
您好:
       建议您从以下几点去排查问题。
1,间隔中断,Rx的的输入被保持为0状态的时间超过了一个帧传输 ...

关掉了Rx和Tx中断,禁用Rx,还是不行。示波器上看输出波形也是时有时无。
有一个可重复现象:用示波器探针点到 底板上 UART-RS232转换芯片SP3232EE 的 T1in 脚,再移开,会连续收到一批数据,基本上是对的,但也不全对;然后又断断续续。难道是硬件问题?

回复 支持 反对

使用道具 举报

4

主题

188

帖子

1698

积分

禁止发言

积分
1698
发表于 2018-12-25 15:23:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-28 22:43 , Processed in 0.043051 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表