LPC1768的串口见鬼,接USB转TTL后乱码,大家谁知道原因?
LPC1768芯片串口TTL电平除了PL2303正常,CH340等别的芯片不正常,什么原因?
PS:CH340模块,是好的。接STM32 STM8 LPC1114 AVR PIC 等都正常,CH340自己收发或与PL2303收发也正常
LPC1768接别的USB转TTL芯片也不正常,只有接PL2303正常。
各位坛友谁有LPC1768,能不能测试下与非PL2303转TTL芯片,对接是不是正常。 如果你有示波器的话,可以测一下信号频率是否对。
一般情况是你的串口波特率没设准。LPC1768有一个波特率的校对 用CP2102试试 可以增加共模电感试试 z31com 发表于 2014-12-23 13:49
如果你有示波器的话,可以测一下信号频率是否对。
一般情况是你的串口波特率没设准。LPC1768有一个波特率的 ...
你是指测哪个频率,串口通信的吗? #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;
} 你看一下,串口那章,4.16节,有一个小数分频 我也遇到了一样的问题,不用太纠结。估计和误差有关系。 lujan1 发表于 2014-12-24 15:55
我也遇到了一样的问题,不用太纠结。估计和误差有关系。
怎么来解决这个问题,什么原因,程序的问题吗? 电平匹配不? StoneSun 发表于 2014-12-24 20:44
电平匹配不?
电平是匹配的 下面是我以前做的东西,还算比较准。
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
上传附件
谢谢,还是波特率有误差引起的乱码,由此可见,PL2303容错能力很强啊,CH340最差 楼主说Pl2003容错能力强,但不能得出CH340最差的结论吧。 lsn_tj 发表于 2014-12-28 12:03
楼主说Pl2003容错能力强,但不能得出CH340最差的结论吧。
波特率差那么多,PL2303能工作,别的不工作,不能说明点问题吗? 你先说的是CH340和别的USB转TTL芯片都试过了,都不行的。
只有PL2003可以。在这一点上,只不过可以说PL2003最好,而不能直接说CH340最差啊。我还以为你又比较过CH340和其他的USB转TTL芯片呢,看来是没有了。 lsn_tj 发表于 2014-12-28 13:51
你先说的是CH340和别的USB转TTL芯片都试过了,都不行的。
只有PL2003可以。在这一点上,只不过可以说PL2003 ...
容错能力:这个我是买了好几种芯片测试的,FT232 CP2102 CH340 PL2303等,其中CH340在波特率一样的情况下,不能正常工作。 “LPC1768接别的USB转TTL芯片也不正常,只有接PL2303正常。”那这句话如何理解? lsn_tj 发表于 2014-12-28 15:48
“LPC1768接别的USB转TTL芯片也不正常,只有接PL2303正常。”那这句话如何理解? ...
是这个意思,以前确实只有PL2303,正常工作,经过z31com指点,发现小数分频器没有设置,我设置了(可能算的不对),发现只有CH340不能工作了,别的正常。
后来参考z31com程序,修改下然后CH340也能工作了,所以才得出了以上的结论。
PS:我现在没有好的方法测试,容错能力,哪位大师可以有能力弄个小软件,可调微调波特率的,然后严格的测试下。看看波特率偏差多少后,芯片就乱码了。当然容错能力不代表芯片的稳定性。 不用小软件,用示波器来测呀, 1、测一下数据的上升沿时间,下降沿时间,
2、测一下频率。 z31com 发表于 2015-1-3 11:38
1、测一下数据的上升沿时间,下降沿时间,
2、测一下频率。
我想,微调波特率,然后看看哪个芯片先挂掉,但是微调波特率的信号怎么发生?从使用结果看,不同的USB转TTL芯片,容错能力有有区别的。 kxb 发表于 2015-1-3 19:16
我想,微调波特率,然后看看哪个芯片先挂掉,但是微调波特率的信号怎么发生?从使用结果看,不同的USB转T ...
看来楼主的目标貌似在帮各厂家做 Debug 的工作啊! 呵呵~ {:titter:} 有的U转串工作在3.3V时接收端配的电阻不对,触发电压会变化,可以试试在U转串的接收端串个电阻,1.5K左右 xyz543 发表于 2015-1-3 23:37
看来楼主的目标貌似在帮各厂家做 Debug 的工作啊! 呵呵~
因为调试程序中,发现了问题,所以就想知道各芯片究竟差异在哪 kxb 发表于 2015-1-3 19:16
我想,微调波特率,然后看看哪个芯片先挂掉,但是微调波特率的信号怎么发生?从使用结果看,不同的USB转T ...
先设小数点分频吧,先小调一下
有示波器吗? z31com 发表于 2015-1-4 12:34
先设小数点分频吧,先小调一下
有示波器吗?
1768我调好了,就是小数分频的问题,现在可以兼容所有的USB转TTL了。 kxb 发表于 2015-1-4 08:41
因为调试程序中,发现了问题,所以就想知道各芯片究竟差异在哪
嗯,理解,跟您开个小玩笑的,勿介意。 {:smile:}
页:
[1]