kxb 发表于 2014-12-23 11:03:24

LPC1768的串口见鬼,接USB转TTL后乱码,大家谁知道原因?

LPC1768芯片串口TTL电平
除了PL2303正常,CH340等别的芯片不正常,什么原因?
PS:CH340模块,是好的。接STM32 STM8 LPC1114 AVR PIC 等都正常,CH340自己收发或与PL2303收发也正常
LPC1768接别的USB转TTL芯片也不正常,只有接PL2303正常。

各位坛友谁有LPC1768,能不能测试下与非PL2303转TTL芯片,对接是不是正常。

z31com 发表于 2014-12-23 13:49:40

如果你有示波器的话,可以测一下信号频率是否对。
一般情况是你的串口波特率没设准。LPC1768有一个波特率的校对

haven9396 发表于 2014-12-23 13:54:43

用CP2102试试

陶新成 发表于 2014-12-23 14:00:31

可以增加共模电感试试

kxb 发表于 2014-12-23 16:24:36

z31com 发表于 2014-12-23 13:49
如果你有示波器的话,可以测一下信号频率是否对。
一般情况是你的串口波特率没设准。LPC1768有一个波特率的 ...

你是指测哪个频率,串口通信的吗?

kxb 发表于 2014-12-23 16:54:29

#include "lpc17xx.h"                              /* LPC17xx definitions    */
#include "uart.h"

#define FOSC                        12000000                            /*Õñµ´Æ÷ƵÂÊ                  */

#define FCCLK                      (FOSC* 8)                        /*Ö÷ʱÖÓƵÂÊ<=100Mhz          */
                                                                        /*FOSCµÄÕûÊý±¶                */
#define FCCO                     (FCCLK * 3)                        /*PLLƵÂÊ(275Mhz~550Mhz)      */
                                                                        /*ÓëFCCLKÏàͬ£¬»òÊÇÆäµÄżÊý±¶ */
#define FPCLK                      (FCCLK / 4)                        /*ÍâÉèʱÖÓƵÂÊ,FCCLKµÄ1/2¡¢1/4*/
                                                                        /*»òÓëFCCLKÏàͬ               */

#define UART0_BPS   115200                                             /* ´®¿Ú0ͨÐŲ¨ÌØÂÊ             */
#define UART2_BPS   115200                                             /* ´®¿Ú2ͨÐŲ¨ÌØÂÊ             */
/*********************************************************************************************************
** Function name:       UART0_Init
** Descriptions:      °´Ä¬ÈÏÖµ³õʼ»¯´®¿Ú0µÄÒý½ÅºÍͨѶ²ÎÊý¡£ÉèÖÃΪ8λÊý¾Ý룬1λֹͣ룬ÎÞÆæżУÑé
** input parameters:    ÎÞ
** output parameters:   ÎÞ
** Returned value:      ÎÞ
*********************************************************************************************************/
void UART0_Init (void)
{
        uint16_t usFdiv;
    /* UART0 */
    LPC_PINCON->PINSEL0 |= (1 << 4);             /* Pin P0.2 used as TXD0 (Com0) */
    LPC_PINCON->PINSEL0 |= (1 << 6);             /* Pin P0.3 used as RXD0 (Com0) */

        LPC_UART0->LCR= 0x83;                      /* ÔÊÐíÉèÖò¨ÌØÂÊ               */
    usFdiv = (FPCLK / 16) / UART0_BPS;         /* ÉèÖò¨ÌØÂÊ                   */
    LPC_UART0->DLM= usFdiv / 256;
    LPC_UART0->DLL= usFdiv % 256;
    LPC_UART0->LCR= 0x03;                      /* Ëø¶¨²¨ÌØÂÊ                   */
    LPC_UART0->FCR= 0x06;                                   
}

z31com 发表于 2014-12-23 17:38:25

你看一下,串口那章,4.16节,有一个小数分频

lujan1 发表于 2014-12-24 15:55:03

我也遇到了一样的问题,不用太纠结。估计和误差有关系。

kxb 发表于 2014-12-24 20:16:30

lujan1 发表于 2014-12-24 15:55
我也遇到了一样的问题,不用太纠结。估计和误差有关系。

怎么来解决这个问题,什么原因,程序的问题吗?

StoneSun 发表于 2014-12-24 20:44:54

电平匹配不?

kxb 发表于 2014-12-24 21:49:45

StoneSun 发表于 2014-12-24 20:44
电平匹配不?

电平是匹配的

z31com 发表于 2014-12-27 19:34:25

下面是我以前做的东西,还算比较准。
if (PortNum == 0)
    {
//        LPC_PINCON->PINSEL0 &= ~0x000000F0;
//        LPC_PINCON->PINSEL0 |= 0x00000050;/* RxD0 is P0.3 and TxD0 is P0.2 */

      LPC_PINCON->PINSEL0 |= (1 << 4);         /* Pin P0.2 used as TXD0 (Com0) */
      LPC_PINCON->PINSEL0 |= (1 << 6);         /* Pin P0.3 used as RXD0 (Com0) */

      /* By default, the PCLKSELx value is zero, thus, the PCLK for
         all the peripherals is 1/4 of the SystemFrequency. */
      /* Bit 6~7 is for UART0 */
      pclkdiv = (LPC_SC->PCLKSEL0 >> 6) & 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_UART0->LCR = 0x83;                         /* 8 bits, no Parity, 1 Stop bit */
      Fdiv         = (pclk * 100 / 16) / baudrate; /*baud rate */
      //注意:系统频率变更的以下的参数也需变,现频率为80M
      if (Fdiv % 100 != 0)
      {
            switch (baudrate)
            {
            case 115200:
                Fdiv         = 8;
                LPC_UART0->DLM = Fdiv / 256;
                LPC_UART0->DLL = Fdiv % 256;
                LPC_UART0->FDR = (5 + (14 << 4));
                break;
            case 57600:
                Fdiv         = 13;
                LPC_UART0->DLM = Fdiv / 256;
                LPC_UART0->DLL = Fdiv % 256;
                LPC_UART0->FDR = (2 + (3 << 4));
                break;
            case 38400:
                Fdiv         = 20;
                LPC_UART0->DLM = Fdiv / 256;
                LPC_UART0->DLL = Fdiv % 256;
                LPC_UART0->FDR = (5 + (8 << 4));
                break;
            case 19200:
                Fdiv         = 47;
                LPC_UART0->DLM = Fdiv / 256;
                LPC_UART0->DLL = Fdiv % 256;
                LPC_UART0->FDR = (5 + (13 << 4));
                break;
            case 9600:
                Fdiv         = 80;
                LPC_UART0->DLM = Fdiv / 256;
                LPC_UART0->DLL = Fdiv % 256;
                LPC_UART0->FDR = (5 + (8 << 4));
                break;
            default:
                Fdiv         = 80;
                LPC_UART0->DLM = Fdiv / 256;
                LPC_UART0->DLL = Fdiv % 256;
                LPC_UART0->FDR = (5 + (8 << 4));
                break;
            }
      }
      else
      {
            Fdiv         = Fdiv / 100;
            LPC_UART0->DLM = Fdiv / 256;
            LPC_UART0->DLL = Fdiv % 256;
      }

      LPC_UART0->LCR = 0x03;          /* DLAB = 0 */
      LPC_UART0->FCR = 0x87;          /* Enable and reset TX and RX FIFO. */

      NVIC_EnableIRQ(UART0_IRQn);
      NVIC_SetPriority(UART0_IRQn, 2);

      //LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS;        /* Enable UART0 interrupt */
      LPC_UART0->IER = IER_RBR | IER_RLS;                                     //
      return(TRUE);
    }

z31com 发表于 2014-12-27 19:37:24

上传附件

kxb 发表于 2014-12-28 11:54:33

z31com 发表于 2014-12-27 19:37
上传附件

谢谢,还是波特率有误差引起的乱码,由此可见,PL2303容错能力很强啊,CH340最差

lsn_tj 发表于 2014-12-28 12:03:52

楼主说Pl2003容错能力强,但不能得出CH340最差的结论吧。

kxb 发表于 2014-12-28 13:07:38

lsn_tj 发表于 2014-12-28 12:03
楼主说Pl2003容错能力强,但不能得出CH340最差的结论吧。

波特率差那么多,PL2303能工作,别的不工作,不能说明点问题吗?

lsn_tj 发表于 2014-12-28 13:51:33

你先说的是CH340和别的USB转TTL芯片都试过了,都不行的。
只有PL2003可以。在这一点上,只不过可以说PL2003最好,而不能直接说CH340最差啊。我还以为你又比较过CH340和其他的USB转TTL芯片呢,看来是没有了。

kxb 发表于 2014-12-28 15:36:24

lsn_tj 发表于 2014-12-28 13:51
你先说的是CH340和别的USB转TTL芯片都试过了,都不行的。
只有PL2003可以。在这一点上,只不过可以说PL2003 ...

容错能力:这个我是买了好几种芯片测试的,FT232 CP2102 CH340 PL2303等,其中CH340在波特率一样的情况下,不能正常工作。

lsn_tj 发表于 2014-12-28 15:48:35

“LPC1768接别的USB转TTL芯片也不正常,只有接PL2303正常。”那这句话如何理解?

kxb 发表于 2014-12-28 17:33:51

lsn_tj 发表于 2014-12-28 15:48
“LPC1768接别的USB转TTL芯片也不正常,只有接PL2303正常。”那这句话如何理解? ...

是这个意思,以前确实只有PL2303,正常工作,经过z31com指点,发现小数分频器没有设置,我设置了(可能算的不对),发现只有CH340不能工作了,别的正常。
后来参考z31com程序,修改下然后CH340也能工作了,所以才得出了以上的结论。
PS:我现在没有好的方法测试,容错能力,哪位大师可以有能力弄个小软件,可调微调波特率的,然后严格的测试下。看看波特率偏差多少后,芯片就乱码了。当然容错能力不代表芯片的稳定性。

z31com 发表于 2015-1-3 11:37:10

不用小软件,用示波器来测呀,

z31com 发表于 2015-1-3 11:38:31

1、测一下数据的上升沿时间,下降沿时间,
2、测一下频率。

kxb 发表于 2015-1-3 19:16:10

z31com 发表于 2015-1-3 11:38
1、测一下数据的上升沿时间,下降沿时间,
2、测一下频率。

我想,微调波特率,然后看看哪个芯片先挂掉,但是微调波特率的信号怎么发生?从使用结果看,不同的USB转TTL芯片,容错能力有有区别的。

xyz543 发表于 2015-1-3 23:37:50

kxb 发表于 2015-1-3 19:16
我想,微调波特率,然后看看哪个芯片先挂掉,但是微调波特率的信号怎么发生?从使用结果看,不同的USB转T ...

看来楼主的目标貌似在帮各厂家做 Debug 的工作啊! 呵呵~ {:titter:}

ymkfbj 发表于 2015-1-4 02:21:03

有的U转串工作在3.3V时接收端配的电阻不对,触发电压会变化,可以试试在U转串的接收端串个电阻,1.5K左右

kxb 发表于 2015-1-4 08:41:48

xyz543 发表于 2015-1-3 23:37
看来楼主的目标貌似在帮各厂家做 Debug 的工作啊! 呵呵~

因为调试程序中,发现了问题,所以就想知道各芯片究竟差异在哪

z31com 发表于 2015-1-4 12:34:11

kxb 发表于 2015-1-3 19:16
我想,微调波特率,然后看看哪个芯片先挂掉,但是微调波特率的信号怎么发生?从使用结果看,不同的USB转T ...

先设小数点分频吧,先小调一下
有示波器吗?

kxb 发表于 2015-1-4 12:36:47

z31com 发表于 2015-1-4 12:34
先设小数点分频吧,先小调一下
有示波器吗?

1768我调好了,就是小数分频的问题,现在可以兼容所有的USB转TTL了。

xyz543 发表于 2015-1-4 16:36:25

kxb 发表于 2015-1-4 08:41
因为调试程序中,发现了问题,所以就想知道各芯片究竟差异在哪

嗯,理解,跟您开个小玩笑的,勿介意。 {:smile:}
页: [1]
查看完整版本: LPC1768的串口见鬼,接USB转TTL后乱码,大家谁知道原因?