智能车制作

标题: K60的串口问题 [打印本页]

作者: bill1430    时间: 2013-2-20 17:11
标题: K60的串口问题
我用的是龙丘的代码,PTD6接串口模块的RX,PTD7接串口模块的TX,芯片的地和串口模块接一起,串口模块外接5V和地,线是接好的,但试了很久上位机都没反应。串口驱动之类的是装好的,也选对COM口了。还可能有什么原因呢?求指导~

补充内容 (2013-2-20 17:52):
//全局变量声明
extern int periph_clk_khz;

//主函数
void main(void)
{
    //1 主程序使用的变量定义
    uint32 runcount;        //运行计数器
    uint8 ch;
   
    //2 关中断
    DisableInterrupts;     //禁止总中断
   
    //3 模块初始化
    light_init(Light_Run_PORT,Light_Run1,Light_OFF); //指示灯初始化
    uart_init (UART0,periph_clk_khz,9600);             //串口初始化


    //4 开中断

    uart_sendN(UART0,(uint8*)"Hello World!",12);
    //主循环
    while(1)
    {
        //1 主循环计数到一定的值,使小灯的亮、暗状态切换
        runcount++;
        if(runcount>=10)
        {
            light_change(Light_Run_PORT,Light_Run1);//指示灯的亮、暗状态切换
            runcount=0;
        }
        //2 串口接收一个字节的数据
        if(uart_reN(UART0,&ch,1))
        {
            uart_send1(UART0,ch);        //发送回去
        }
                    
    }
}


补充内容 (2013-2-20 17:53):
//-------------------------------------------------------------------------*
//函数名: uart_init                                                        *
//功  能: 初始化uartx模块。                                                *
//参  数: uartch:串口号                                                    *
//        sysclk:系统总线时钟,以MHz为单位                                 *
//        baud:波特率,如9600,38400等,一般来说,速度越慢,通信越稳       *
//返  回: 无                                                               *
//说  明:                                                                  *
//-------------------------------------------------------------------------*
void uart_init (UART_MemMapPtr uartch, uint32 sysclk, uint32 baud)
{
        register uint16 sbr, brfa;
        uint8 temp;

        //使能引脚
        if (uartch == UART0_BASE_PTR)
        {
                //在PTD6上使能UART0_TXD功能
                PORTD_PCR6 = PORT_PCR_MUX(0x3);
                //在PTD7上使能UART0_RXD
                PORTD_PCR7 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART1_BASE_PTR)
        {
                //在PTC4上使能UART1_TXD功能
                PORTC_PCR4 = PORT_PCR_MUX(0x3);
               
                //在PTC3上使能UART1_RXD
                PORTC_PCR3 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART2_BASE_PTR)
        {
                //在PTD3上使能UART2_TXD功能
                PORTD_PCR3 = PORT_PCR_MUX(0x3);
                //在PTD2上使能UART2_RXD
                PORTD_PCR2 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART3_BASE_PTR)
        {
                //在PTC17上使能UART3_TXD功能
                PORTC_PCR17 = PORT_PCR_MUX(0x3);
                //在PTC16上使能UART3_RXD
                PORTC_PCR16 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART4_BASE_PTR)
        {
                //在PTE24上使能UART4_TXD功能
                PORTE_PCR24 = PORT_PCR_MUX(0x3);
                //在PTE25上使能UART4_RXD
                PORTE_PCR25 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART5_BASE_PTR)
        {
                //在PTE8上使能UART5_TXD功能
                PORTE_PCR8 = PORT_PCR_MUX(0x3);
                //在PTE9上使能UART5_RXD
                PORTE_PCR9 = PORT_PCR_MUX(0x3);
        }
         
        //使能串口时钟   
        if(uartch == UART0_BASE_PTR)
                SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;
        else
                if (uartch == UART1_BASE_PTR)
                        SIM_SCGC4 |= SIM_SCGC4_UART1_MASK;
                else
                        if (uartch == UART2_BASE_PTR)
                                SIM_SCGC4 |= SIM_SCGC4_UART2_MASK;
                        else
                                if(uartch == UART3_BASE_PTR)
                                        SIM_SCGC4 |= SIM_SCGC4_UART3_MASK;
                                else
                                        if(uartch == UART4_BASE_PTR)
                                                SIM_SCGC1 |= SIM_SCGC1_UART4_MASK;
                                        else
                                                SIM_SCGC1 |= SIM_SCGC1_UART5_MASK;
                                                               
        //禁止发送接受
        UART_C2_REG(uartch) &= ~(UART_C2_TE_MASK
                                | UART_C2_RE_MASK );
       
        //配置成8位无校验模式
        UART_C1_REG(uartch) = 0;
       
        //计算波特率,串口0、1使用内核时钟,其它串口使用外设时钟,系统时钟为
        //外设时钟的2倍
        if ((uartch == UART0_BASE_PTR) | (uartch == UART1_BASE_PTR))//
                sysclk+=sysclk;
       
        sbr = (uint16)((sysclk*1000)/(baud * 16));
        temp = UART_BDH_REG(uartch) & ~(UART_BDH_SBR(0x1F));
        UART_BDH_REG(uartch) = temp |  UART_BDH_SBR(((sbr & 0x1F00) >> 8));
        UART_BDL_REG(uartch) = (uint8)(sbr & UART_BDL_SBR_MASK);
        brfa = (((sysclk*32000)/(baud * 16)) - (sbr * 32));
        temp = UART_C4_REG(uartch) & ~(UART_C4_BRFA(0x1F));
        UART_C4_REG(uartch) = temp |  UART_C4_BRFA(brfa);   
       
        //使能发送接受
        UART_C2_REG(uartch) |= (UART_C2_TE_MASK
                                | UART_C2_RE_MASK );
}

作者: bill1430    时间: 2013-2-20 22:02
自己顶一个,啥没人说话呢?是我表述不清还是……
作者: shaojianbuguai    时间: 2013-2-20 23:08
我也刚看这里,也还不是很清楚
你那个串口模块是什么?
还有你不用上位机,用串口调试工具或sscom42什么的看能不能发送接收
作者: bill1430    时间: 2013-2-20 23:19
shaojianbuguai 发表于 2013-2-20 23:08
我也刚看这里,也还不是很清楚
你那个串口模块是什么?
还有你不用上位机,用串口调试工具或sscom42什么的 ...

串口模块是MAX232电平转换电路,串口工具也有试过,都不行...

作者: sdlibin007@qq.c    时间: 2013-2-21 13:53
:):)
作者: bill1430    时间: 2013-2-21 15:21
sdlibin007@qq.c 发表于 2013-2-21 13:53

问题还没解决,有什么建议吗?

作者: sdlibin007@qq.c    时间: 2013-2-21 15:24
bill1430 发表于 2013-2-21 15:21
问题还没解决,有什么建议吗?

呵呵,暂时没有
作者: bill1430    时间: 2013-2-21 23:51
问题已解决,好像还是驱动的问题
作者: fish007    时间: 2013-3-8 11:33
怎么解决的?

作者: bill1430    时间: 2013-3-8 16:25
fish007 发表于 2013-3-8 11:33
怎么解决的?

打开设备管理器,确保驱动装好,上位机选对COM口就好,当然TXD和RXD也要接对

作者: fish007    时间: 2013-3-8 16:59
嗯,谢谢指导,那个我也清楚,只是不知道TXD和RXD接K60的哪个引脚
作者: bill1430    时间: 2013-3-8 21:57
看我代码,PTD6接串口模块的RX,PTD7接串口模块的TX,也可以接其它UART,数据手册有参考
作者: 小挺挺    时间: 2013-3-9 22:49
还有就是波特率   显示格式十六进制还是什么的。。。

作者: 尕玍紿    时间: 2013-3-29 19:46
bill1430 发表于 2013-2-21 23:51
问题已解决,好像还是驱动的问题

亲....交流下咧!
我在这里都卡死4天了,到现在还是没解决呢...!
那个 看你的硬件连接 好像不对吧....
K60的PTD7是TX,PTD6才是RX吧...[attach]42937[/attach]
我之前也接错过,都怪注释弄反了...
可是我接对后还是有问题...虽然收到东西了,可是接收却是错误的!
调到现在 还没解决,都想哭了...求加Q探讨下咧...584852734

目前我的情况是:不能连续的发送数据,一连续的发送就会出问题!如果在连续发送之间加一个延时就能正确接受了。可去了延时就不行了....求楼主行行好,指导下咧


作者: huangdewen    时间: 2013-4-24 01:01
不要用龙丘的代码,自己写吧。我刚来始也用他的代码,发现不能用就自己写一个。
作者: huangdewen    时间: 2013-4-24 01:02
不要用龙丘的代码,自己写吧。我刚来始也用他的代码,发现不能用就自己写一个。
作者: 牛牛爱向阳    时间: 2013-6-20 16:57
亲,现在我也有同样的问题啊!求助啊
作者: 穿越你的灵魂    时间: 2014-3-18 16:43
bill1430 发表于 2013-3-8 16:25
打开设备管理器,确保驱动装好,上位机选对COM口就好,当然TXD和RXD也要接对

txd和rxd需要自己接线么?

作者: fgjbv    时间: 2014-3-30 20:33
bill1430 发表于 2013-2-21 23:51
问题已解决,好像还是驱动的问题

请问你用的是带有max232电平转换的usb接口,而不是usb ttl的接口吗
作者: 敖丙    时间: 2014-11-22 20:20
我也碰到这情况了,卡在这里了。
我装好了驱动。用的串口是左边那个红色的,用杜邦线连到K60上的。
也是用的你这个例程,但是串口助手没反应。求助。
作者: suren    时间: 2015-4-5 23:51
bill1430 发表于 2013-2-21 15:21
问题还没解决,有什么建议吗?{:soso_e154:}

你好,我也遇到这个问题,你是怎么解决的呢

作者: 隔壁老王丶    时间: 2016-3-31 18:24
...我也遇到了同样的问题.....




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