打印
[DSP编程]

28335串口编程问题求解!

[复制链接]
3977|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
scottly|  楼主 | 2014-11-14 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 scottly 于 2014-11-14 18:54 编辑

1.用网上买的开发板。上面用的是SCIC串口,接了MAX232电平转换芯片;和PC电脑串口通信正常,串口助手收发都显示正常;
2.自己公司的板子,用的是串口SCIB,接的是sp3232电平转换芯片;但串口什么数据显示都没有;数据格式、波特率都设置正确的;各位给点思路?

(PS:板子上SCIBTXD引脚先接到一个si8422芯片,用来做隔离的,再接的电平转换芯片;
   用示波器测量,程序里28335发送数据给PC时,SCIBTXD引脚有一个电平的跳变,但是经过si8422芯片后的SCIBTXD就没有波形的跳变了,会是这里的问题吗?)

相关帖子

沙发
scottly|  楼主 | 2014-11-14 14:34 | 只看该作者
贴上程序:
void main(void)
{

    Uint16 ReceivedChar;
    char *msg;
    InitSysCtrl();

    InitScibGpio();
//   InitXintf16Gpio();

   DINT;

   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;

   InitPieVectTable();

// Step 5. User specific code:

    LoopCount = 0;
    ErrorCount = 0;

    scib_fifo_init();           // Initialize the SCI FIFO
    scib_echoback_init();  // Initalize SCI for echoback

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

    msg = "\r\nYou will enter a character, and the DSP will echo it back! \n\0";
    scib_msg(msg);

        for(;;)
    {
       msg = "\r\nEnter a character: \0";
       scib_msg(msg);

       // Wait for inc character
       while(ScibRegs.SCIFFRX.bit.RXFFST == 0) {} // ==1 break->receive BUF has new DATA
           msg = "  You sent: \0";
       scib_msg(msg);
            // Get all character
           do
           {
         ReceivedChar = ScibRegs.SCIRXBUF.all;
       // Echo character back      
         scib_xmit(ReceivedChar);
                }while(ScibRegs.SCIFFRX.bit.RXFFST != 0);

       LoopCount++;
    }

}


// Test 1,SCIA  DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
void scib_echoback_init()
{
    // Note: Clocks were turned on to the SCIA peripheral
    // in the InitSysCtrl() function

        ScibRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
        ScibRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
        ScibRegs.SCICTL2.all =0x0003;
        ScibRegs.SCICTL2.bit.TXINTENA = 1;
        ScibRegs.SCICTL2.bit.RXBKINTENA =1;
        #if (CPU_FRQ_150MHZ)
              ScibRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 37.5MHz.
              ScibRegs.SCILBAUD    =0x00E7;
        #endif
        #if (CPU_FRQ_100MHZ)
      ScibRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 20MHz.
      ScibRegs.SCILBAUD    =0x0044;
        #endif
        ScibRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
}

// Transmit a character from the SCI
void scib_xmit(int a)
{
    while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}
    ScibRegs.SCITXBUF=a;
}

void scib_msg(char * msg)
{
    int i;
    i = 0;
    while(msg[i] != '\0')
    {
        scib_xmit(msg[i]);
        i++;
    }
}

// Initalize the SCI FIFO
void scib_fifo_init()
{
        //ScibRegs.SCIFFTX.all=0x8000;
    ScibRegs.SCIFFTX.all=0xE040;
    ScibRegs.SCIFFRX.all=0x204f;
    ScibRegs.SCIFFCT.all=0x0;        //禁止串口自动检测波特率
}

使用特权

评论回复
板凳
scottly|  楼主 | 2014-11-14 14:34 | 只看该作者

使用特权

评论回复
地板
wangch_sh| | 2014-11-14 15:05 | 只看该作者

你循环发一个固定的数,比如0x55,用示波器测SCIBTXD引脚波形是否正确。
如果正确的话,可以先试着把si8422芯片搞掉,或者跳线直接接到电平转换芯片上试试。

使用特权

评论回复
5
scottly|  楼主 | 2014-11-14 16:38 | 只看该作者
wangch_sh 发表于 2014-11-14 15:05
你循环发一个固定的数,比如0x55,用示波器测SCIBTXD引脚波形是否正确。
如果正确的话,可以先试着把si842 ...

SCI—A  B  C的寄存器配置都是一样的吧???

使用特权

评论回复
6
wangch_sh| | 2014-11-14 17:50 | 只看该作者
你现在用B,就把C都改成B就对了。

使用特权

评论回复
7
scottly|  楼主 | 2014-11-14 17:57 | 只看该作者
wangch_sh 发表于 2014-11-14 17:50
你现在用B,就把C都改成B就对了。

对的呀  就是这样改的,哎。。。
这块板子上用了A和B A由28335直接引出,B接了一个si842和sp3232芯片后引出,我写的程序使用A可以和电脑正常通信,换成B就不行;
一个简单的串口都没搞定。。。只能说太水了,关键硬件的问题比较难查。。。

使用特权

评论回复
8
wangch_sh| | 2014-11-14 17:59 | 只看该作者
A可以那就说明软件没问题。你用示波器测DSP的发送腿了吗?波形对不对?

使用特权

评论回复
9
zhangmangui| | 2014-11-14 18:28 | 只看该作者
这个应该是硬件的问题 隔离后你要确保有数据

使用特权

评论回复
10
scottly|  楼主 | 2014-11-14 18:52 | 只看该作者
wangch_sh 发表于 2014-11-14 17:59
A可以那就说明软件没问题。你用示波器测DSP的发送腿了吗?波形对不对?

发送脚有数据,但貌似经过隔离芯片后就没有了;
明天对比买的板子上的B测试一下。。。

使用特权

评论回复
11
scottly|  楼主 | 2014-11-14 18:55 | 只看该作者
zhangmangui 发表于 2014-11-14 18:28
这个应该是硬件的问题 隔离后你要确保有数据

嗯  大哥在帮我看看代码有没有哪边有问题

使用特权

评论回复
12
scottly|  楼主 | 2014-11-15 19:11 | 只看该作者
问题找到了,是硬件的问题,软件没问题。

使用特权

评论回复
13
sunyu817| | 2015-12-1 10:57 | 只看该作者
这个程序直接通过串口连接PC和开发板,应该怎么操作才能在串口调试工具上看到发送的字符串

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

179

帖子

1

粉丝