智能车制作

标题: 串口通信一直显示乱码的问题T^T [打印本页]

作者: 枪水_仙    时间: 2014-1-21 18:08
标题: 串口通信一直显示乱码的问题T^T
在下纯新手,用的k60芯片,烧录软件STC_ISP_V480,想做ADC的串口通信,但返回的总是些“瞃YVV脲?ffdYY薤霛摍彊咫咫瞃YVV脲?”这样子的乱码试了些其他串口的例程,也是一些乱码,我用的是岱墨的那些例程,哪位大大能帮我解决下{:soso_e105:}
另外,由于我们学校没有老师教,也没什么一起学习的伙伴,完全自学的状态。学起来感觉像是无头苍蝇一样,不知道该从何入手,可以的话也顺便给我指明or指点下道路吧{:soso_e136:}

作者: wajuka    时间: 2014-1-21 18:15
你看下波特率匹配不 波特率不对可能出现乱码的情况
作者: 枪水_仙    时间: 2014-1-21 18:33
wajuka 发表于 2014-1-21 18:15
你看下波特率匹配不 波特率不对可能出现乱码的情况

串口的跟程序的是同一个,而且试了19200跟9600这两种,结果也都是乱码

作者: qinlu123    时间: 2014-1-21 19:00
看看是否接触不良
作者: tobeabh    时间: 2014-1-21 19:02
发下你串口的发送函数
作者: wzp1992    时间: 2014-1-21 20:08
是不是你串口调试助手字符集选择的问题
作者: 凤羽    时间: 2014-1-21 20:47
串口发送出乱码有很多原因,总结我见过的有以下几种,给LZ抛块砖:
1、首先检查波特率2、检查程序发送的通信格式,包括字符格式3、检查串口通信软件的发送数据类型4、比较坑爹的还有,串口线过长、串口发送PIN电平受干扰···
作者: 枪水_仙    时间: 2014-1-21 21:30
tobeabh 发表于 2014-1-21 19:02
发下你串口的发送函数

void uart_init (UARTn uartn, u32 baud)
{
    register uint16 sbr, brfa;
    uint8 temp;
    u32 sysclk;     //时钟

    /* 配置 UART功能的 GPIO 接口 开启时钟 */
    switch(uartn)
    {
    case UART0:
        if(UART0_RX == PTA1)
            PORTA_PCR1 = PORT_PCR_MUX(0x2);      //在PTA1上使能UART0_RXD
        else if(UART0_RX == PTA15)
            PORTA_PCR15 = PORT_PCR_MUX(0x3);     //在PTA15上使能UART0_RXD
        else if(UART0_RX == PTB16)
            PORTB_PCR16 = PORT_PCR_MUX(0x3);     //在PTB16上使能UART0_RXD
        else if(UART0_RX == PTD6)
            PORTD_PCR6 = PORT_PCR_MUX(0x3);      //在PTD6上使能UART0_RXD
        else
            assert_failed(__FILE__, __LINE__);   //设置管脚有误?

        if(UART0_TX == PTA2)
            PORTA_PCR2 = PORT_PCR_MUX(0x2);     //在PTA2上使能UART0_RXD
        else if(UART0_TX == PTA14)
            PORTA_PCR14 = PORT_PCR_MUX(0x3);     //在PTA14上使能UART0_RXD
        else if(UART0_TX == PTB17)
            PORTB_PCR17 = PORT_PCR_MUX(0x3);     //在PTB17上使能UART0_RXD
        else if(UART0_TX == PTD7)
            PORTD_PCR7 = PORT_PCR_MUX(0x3);     //在PTD7上使能UART0_RXD
        else
            assert_failed(__FILE__, __LINE__);  //设置管脚有误?


        SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;      //使能 UARTn 时钟
        break;

    case UART1:
        if(UART1_RX == PTC3)
            PORTC_PCR3 = PORT_PCR_MUX(0x3);     //在PTC3上使能UART1_RXD
        else if(UART1_RX == PTE1)
            PORTE_PCR1 = PORT_PCR_MUX(0x3);     //在PTE1上使能UART1_RXD
        else
            assert_failed(__FILE__, __LINE__);  //设置管脚有误?

        if(UART1_TX == PTC4)
            PORTC_PCR4 = PORT_PCR_MUX(0x3);     //在PTC4上使能UART1_RXD
        else if(UART1_TX == PTE0)
            PORTE_PCR0 = PORT_PCR_MUX(0x3);     //在PTE0上使能UART1_RXD
        else
            assert_failed(__FILE__, __LINE__);  //设置管脚有误?

        SIM_SCGC4 |= SIM_SCGC4_UART1_MASK;
        break;
是这个吗,我用的是uart1


作者: 枪水_仙    时间: 2014-1-21 21:31
qinlu123 发表于 2014-1-21 19:00
看看是否接触不良

应该不是不过还是谢谢啊嘿嘿

作者: 枪水_仙    时间: 2014-1-22 08:32
wzp1992 发表于 2014-1-21 20:08
是不是你串口调试助手字符集选择的问题

不大明白,不过应该怎么检查呢

作者: 枪水_仙    时间: 2014-1-22 08:41
凤羽 发表于 2014-1-21 20:47
串口发送出乱码有很多原因,总结我见过的有以下几种,给LZ抛块砖:
1、首先检查波特率2、检查程序发送的通 ...

程序发送用的是printf函数,发送格式是%d,串口软件有16进制显示与字符格式显示两种方式{:soso_e136:}不知道是不是这里有问题呢

作者: tobeabh    时间: 2014-1-22 11:56
你先不用printf,直接发送自护或者数字,看是不是还乱码
作者: 枪水_仙    时间: 2014-1-22 13:11
tobeabh 发表于 2014-1-22 11:56
你先不用printf,直接发送自护或者数字,看是不是还乱码

直接发送其他数据收到的也不是想要的,譬如发送A却得到了十六进制里的5F。UART_D_REG(UARTx[uartn]) = (u8)ch;这条语句有问题吗



作者: wzp1992    时间: 2014-1-23 17:24
你可以用串口调试助手给自己发送数据试试
作者: chiusir    时间: 2014-1-25 10:25
频率高于9600最好做一次校准,一般波特率就没有问题了。




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2