打印

LPC1756的串口问题,请高手帮忙啊。。

[复制链接]
2744|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
summerlee|  楼主 | 2013-4-20 04:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
while ( Length != 0 )
    {
          /* THRE status, contain valid data */
          while ( !(UART1TxEmpty & 0x01) );
                  
          LPC_UART1->THR = *BufferPtr;
          UART1TxEmpty = 0;        /* not empty in the THR until it shifts out */
          BufferPtr++;
          Length--;
                 delay_time(2);  //此处的延时必须需要,否则发送数据多于50个的时候会容易发不出去就死机在while语句里面,延时1.8毫秒
    }
以上代码是NXPLPC1756的串口的,测试发现发送的时候必须每个字节之间加2毫秒的延时,否则发送字节超过50多个的时候会死在while empty里面那句上,怎么回事啊。。请高手帮忙,多谢了。。

相关帖子

沙发
summerlee|  楼主 | 2013-4-20 04:59 | 只看该作者
再发上初始化的代码,都是例程里面的,就是改了口线定义,按照硬件改成了自己用的口线,第三功能的。。熟悉的朋友帮忙分析分析给个提示吧。。谢谢。
        LPC_PINCON->PINSEL4 &= ~0x0000000F;  //TXD1 in P0.0,P0.1设置成第三功能,首先清成0,每根线占2位,低4位
        LPC_PINCON->PINSEL4 |= 0x0000000A;  //TXD1 in P0.0,P0.1设置成第三功能,再改成1010,每根线占2位
        
        
        /* By default, the PCLKSELx value is zero, thus, the PCLK for
        all the peripherals is 1/4 of the SystemFrequency. */
        /* Bit 8,9 are for UART1 */
        pclkdiv = (LPC_SC->PCLKSEL0 >> 8) & 0x03;
        switch ( pclkdiv )
        {
          case 0x00:
          default:
                pclk = SystemFrequency/4;
                break;
          case 0x01:
                pclk = SystemFrequency;
                break;
          case 0x02:
                pclk = SystemFrequency/2;
                break;
          case 0x03:
                pclk = SystemFrequency/8;
                break;
        }

    LPC_UART1->LCR = 0x83;                /* 8 bits, no Parity, 1 Stop bit */
        Fdiv = ( pclk / 16 ) / baudrate ;        /*baud rate */
    LPC_UART1->DLM = Fdiv / 256;                                                        
    LPC_UART1->DLL = Fdiv % 256;
        LPC_UART1->LCR = 0x03;                /* DLAB = 0 */
    LPC_UART1->FCR = 0x07;                /* Enable and reset TX and RX FIFO. */

           NVIC_EnableIRQ(UART1_IRQn);

               
                 LPC_UART1->IER = IER_RBR | IER_THRE | IER_RLS;        /* Enable UART1 interrupt */


使用特权

评论回复
板凳
mmuuss586| | 2013-4-20 09:23 | 只看该作者
没用过。只玩过1788

使用特权

评论回复
地板
mmuuss586| | 2013-4-20 09:24 | 只看该作者
有需要自己下

使用特权

评论回复
5
zhangchangyu1| | 2013-4-27 15:03 | 只看该作者
mark

使用特权

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

本版积分规则

62

主题

150

帖子

1

粉丝