庄吉 发表于 2013-10-15 20:29

LPC2132串口通讯问题,串口助手调试发送接收程序,接收乱码,无接收

用串口发送数据给MCU,MCU就把数据返回给串口助手显示,出现狂接收00 00 00,有时又是乱码,有时没有接收,在MCU的TXD,RXD加上拉电阻也不行。MCU的RXD有 4.6V,TXD有 2.6V最后在TXD和RXD之间串联了一个220欧电阻,通讯正常,MCU有点温度。为什么TXD和RXD之间串联电阻才行???求大神啊,迷茫中......

阿南 发表于 2013-10-15 22:27

是否有接RS232转换芯片?

庄吉 发表于 2013-10-16 09:00

阿南 发表于 2013-10-15 22:27 static/image/common/back.gif
是否有接RS232转换芯片?

:L用了MAX232啊,会不会是因为MAX232质量问题啊

tanshi_li 发表于 2013-10-16 10:46

多半是max232芯片的问题,测一下max232到pc的rx与tx的波形电压是否正常.

阿南 发表于 2013-10-16 14:34

对,或者直接换一片RS232芯片看看,这个假货特别多

庄吉 发表于 2013-10-17 10:53

阿南 发表于 2013-10-16 14:34 static/image/common/back.gif
对,或者直接换一片RS232芯片看看,这个假货特别多

换了,不行。MAX232给LPC2132/MAR7,TTL信号5V电平,LPC2132/ARM7给MAX2323.3V电平,会不会是电压不匹配啊?

庄吉 发表于 2013-10-17 10:54

tanshi_li 发表于 2013-10-16 10:46 static/image/common/back.gif
多半是max232芯片的问题,测一下max232到pc的rx与tx的波形电压是否正常.

换了,不行。MAX232给LPC2132/MAR7,TTL信号5V电平,LPC2132/ARM7给MAX2323.3V电平,会不会是电压不匹配啊?

阿南 发表于 2013-10-17 21:38

5。5到3.3V肯定不配置呀

阿南 发表于 2013-10-17 21:39

换成MAX3232

庄吉 发表于 2013-10-18 10:10

阿南 发表于 2013-10-17 21:39 static/image/common/back.gif
换成MAX3232

在TXD和RXD之间串联个电阻后,PC送来的数据经过串联的那个电阻有返回去了。都没有经过CPU,所以能正常显示。说到底还是程序问题啊:lol,我程序是周立功的例程啊,怎么会错 呢

庄吉 发表于 2013-10-18 10:13

#include <LPC213x.H>


typedef unsigned int uint32;
typedef unsigned short int uint16;
typedef unsigned char uint8;

#define Fpclk11059200


void DelayNS(uint32 dly)
{
        uint32 i;
        for(;dly>0;dly--)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
        for(i=0;i<50000;i++);
}


void PLL_Init()
{
PLLCON = 1;          //使能PLL
//VPBDIV = 0;   
//Fpclk=Fcclk/4;
PLLCFG=0x63;       //P=2,M=4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
PLLFEED = 0xaa;
PLLFEED = 0x55;                        //更改生效
while((PLLSTAT & (1 << 10)) == 0);//等待PLL锁定
PLLCON = 3;
PLLFEED= 0xaa;
PLLFEED = 0x55;       
       
}

typedef structUartMode         //定义串口模式设置数据结构
{                                                                                                                                                                                                                 
        uint8 datab;
        uint8 stopb;
        uint8 parity;
}
UARTMODE;


uint8 rcv_buf;
uint8 rcv_new;



void __irq IRQ_UART0(void)                   //接受中断
{
        uint8 i;
        if(0x04==(U0IIR&0x0F))
        rcv_new=1;
        for(i=0;i<8;i++)
        {
                rcv_buf=U0RBR;
        }                                                                                             
        VICVectAddr=0x00;
}

voidSendByte(uint8 data)
{
        U0THR=data;
}

void ISendBuf(void)
{
        uint8 i;
        for(i=0;i<8;i++)
        {
                SendByte(rcv_buf);
                DelayNS(100);
        }       
        while((U0LSR&0x40)==0);
}

uint8 UART0_Ini(uint32 baud,UARTMODE set)
{
        uint32 bak;                                                                           //参数过滤
        if((0==baud)||(baud>115200)) return(0);
        if((set.datab<5)||(set.datab>8)) return(0);
        if((0==set.stopb)||(set.stopb>2)) return(0);
        if(set.parity>4) return(0);

        U0LCR=0x80;                                                                           //设置串口波特率
        bak=(Fpclk>>4)/baud;
        U0DLM=bak>>8;
        U0DLL=bak&0xFF;
       

        bak=set.datab-5;                                                               //设置串口模式
        if(2==set.stopb) bak|=0x04;

        if(0!=set.parity){set.parity=set.parity-1;bak|=0x08;}
        bak|=set.parity<<4;
        U0LCR=bak;
        return(1);

}

int main(void)
{
        UARTMODE uart0_set;
        PINSEL0=0x00000005;
        PINSEL0=0x00000000;
        rcv_new=0;
        uart0_set.datab=8;
        uart0_set.stopb=1;
        uart0_set.parity=0;

        UART0_Ini(115200,uart0_set);

        U0FCR=0x81;                                                       //设置触发点为8个字节
        U0IER=0x01;

        VICIntSelect=0x00000000;                                //设置中断允许
        VICVectCntl0=0x26;
        VICVectAddr0=(int)IRQ_UART0;
        VICIntEnable=0x00000040;

        while(1)
        {
                if(rcv_new==1)
                {
                        ISendBuf();
                        rcv_new=0;                                       
                }
        }
       
       return(0);
}

阿南 发表于 2013-10-18 13:17

主体程序应该不会错的,有问题也可能是在管脚的对应上存在些偏差

庄吉 发表于 2013-10-19 16:29

阿南 发表于 2013-10-18 13:17 static/image/common/back.gif
主体程序应该不会错的,有问题也可能是在管脚的对应上存在些偏差

我知道错哪里了,没有使能IRQ中断,所以没有反应不知道怎么使能..........

庄吉 发表于 2013-10-19 16:32

庄吉 发表于 2013-10-19 16:29 static/image/common/back.gif
我知道错哪里了,没有使能IRQ中断,所以没有反应不知道怎么使能..........

也就是IRQEnable();周立功在启动代码里就是使能,可我的启动代码我看不懂,我估计我的启动代码里设置IRQ中断关的。我看不懂

庄吉 发表于 2013-10-19 16:33

庄吉 发表于 2013-10-19 16:29 static/image/common/back.gif
我知道错哪里了,没有使能IRQ中断,所以没有反应不知道怎么使能..........

也就是IRQEnable();周立功在启动代码里就是使能,可我的启动代码我看不懂,我估计我的启动代码里设置IRQ中断关的。我看不懂

阿南 发表于 2013-10-19 22:42

找本汇编的书对着指令看,应该是可以看懂的。
或者看看《ARM Linux入门与实践》里面关于启动代码部分内容

庄吉 发表于 2013-10-21 15:35

阿南 发表于 2013-10-19 22:42 static/image/common/back.gif
找本汇编的书对着指令看,应该是可以看懂的。
或者看看《ARM Linux入门与实践》里面关于启动代码部分内容 ...

是不是难入门的原因就是这些定义和启动代码啊?

阿南 发表于 2013-10-21 15:40

可以这么理解,就好比你不知道盒子里面是什么,而盒子里面总发现怪怪的东西骚扰你一样
页: [1]
查看完整版本: LPC2132串口通讯问题,串口助手调试发送接收程序,接收乱码,无接收