智能车制作

标题: 这个无法串口通信是什么原因呢?朋友们能帮忙解决吗? [打印本页]

作者: sjl123    时间: 2013-5-31 22:35
标题: 这个无法串口通信是什么原因呢?朋友们能帮忙解决吗?
我用IAR,龙丘MK40N512ZVLQ10,E8,E9,为TX,RX,  PL2303链接。COM7口
程序
fire_drivers_cfg.h部分
#define UART5_RX    PTE9        //PTD8、PTE9
#define UART5_TX    PTE8        //PTD9、PTE8



k60_fire.h部分
*************************************************************************/
#define FIRE_PORT           UART5
#define FIRE_BAUD           9600

/*************************************************************************
*                             野火嵌入式开发工作室
*
*  功能说明:定义芯片型号
*  备    注:
*************************************************************************/
#define CPU_MK40N512VMD100




main.c部分
void  main(void)     
{
    uart_init(UART5, 9600);                                          //初始化串口

    printf("串口发送实验\n\n");                                       //使用printf来发送
    printf("\t\t——野火kinetis开发板\n\n");

    while(1)
    {  
        uart_putchar (UART5,'F');                                     //发送一个字符'F'
        uart_sendN (UART5,"uart_sendN\n",11);                         //发送11个字符
        uart_sendStr (UART5,"uart_str函数发送数据");                  //发送字符串
        printf("\n-------------野火kinetis开发板-------------\n\n");  //使用printf来发送
        time_delay_ms(500);                                           //延时
    }
}


但是烧进去后串口软件无反应
[attach]46357[/attach]


作者: sjl123    时间: 2013-5-31 22:36
上面标错了,是#define CPU_MK60N512VMD100,这个已经改了,但是问题依旧
作者: sjl123    时间: 2013-6-1 17:25
别沉啊~~~~~~~~~~~~~·
作者: ♂ˇ邂逅√♀    时间: 2013-6-1 17:30
串口上的接收数据那个灯有木有亮?!~另外,R和T两条线有木有接反了?!~~~
作者: sjl123    时间: 2013-6-1 22:33
♂ˇ邂逅√♀ 发表于 2013-6-1 17:30
串口上的接收数据那个灯有木有亮?!~另外,R和T两条线有木有接反了?!~~~

亮的,而且木有接反>......,

作者: ♂ˇ邂逅√♀    时间: 2013-6-2 00:01
sjl123 发表于 2013-6-1 22:33
亮的,而且木有接反>......,

接收数据的指示灯亮着或者闪烁,说明有接收到数据啊...这样的话说明程序没问题。但是也不可能一片空白啊,那可能是电脑设置或者串口软件有问题嚄~~~重装一下串口驱动以及更换一个串口软件再试试看吧~~咔咔~~

作者: sjl123    时间: 2013-6-3 18:52
♂ˇ邂逅√♀ 发表于 2013-6-2 00:01
接收数据的指示灯亮着或者闪烁,说明有接收到数据啊...这样的话说明程序没问题。但是也不可能一片空白啊, ...

哎》。。。。各种心酸,哥们,问下,按道理说,我是电磁组的,如果我现在跑道连上电源,是不是打开串口软件的话应该一直接受数据呢?

作者: ♂ˇ邂逅√♀    时间: 2013-6-3 20:16
sjl123 发表于 2013-6-3 18:52
哎》。。。。各种心酸,哥们,问下,按道理说,我是电磁组的,如果我现在跑道连上电源,是不是打开串口软 ...

啊?抱歉,听不懂你的问题~~你串口数据接收,跟跑道是否接收上串口,有关系????
只要你代码写上发送数据的,这样串口能接收到数据就能在软件上显示啊...
↑不知道这个是不是你要的答案?或者说你再说明白点?

作者: sjl123    时间: 2013-6-3 23:04
♂ˇ邂逅√♀ 发表于 2013-6-3 20:16
啊?抱歉,听不懂你的问题~~你串口数据接收,跟跑道是否接收上串口,有关系????
只要你代码写上发送 ...

哥们,我用的是龙丘的板子,我今天测试了一下,用龙丘的UART测试程序,串口软件就可以返回值,但是用野火的测试软件就发生很多问题[attach]46520[/attach][attach]46519[/attach]
作者: ♂ˇ邂逅√♀    时间: 2013-6-3 23:43
sjl123 发表于 2013-6-3 23:04
哥们,我用的是龙丘的板子,我今天测试了一下,用龙丘的UART测试程序,串口软件就可以返回值,但是用野火 ...

哥们,别的不说,你看看你软件的右上角嚄,是HEX接收的,这个明显就是一个大问题啊~~~应该是字符串接收才对嚄~~~至于你是用了自检信息的那个串口,那,应该会一开机就输出很多很多信息嚄!~~~看来有可能是哪里出现问题了...要不你重新去下一个底层库,再试试??我用到是野火的,没太大问题呢~~~咔咔~~~

作者: sjl123    时间: 2013-6-4 21:49
♂ˇ邂逅√♀ 发表于 2013-6-3 23:43
哥们,别的不说,你看看你软件的右上角嚄,是HEX接收的,这个明显就是一个大问题啊~~~应该是字符串接收才 ...

哥们,今天不在学校,我明天回去,我去试试,还有就是我用的龙丘的板子,用野火的库是不是需要改一些东西,比如三天学会野火里讲的是对应野火的板子的,有这种情况吗

作者: ♂ˇ邂逅√♀    时间: 2013-6-4 22:34
sjl123 发表于 2013-6-4 21:49
哥们,今天不在学校,我明天回去,我去试试,还有就是我用的龙丘的板子,用野火的库是不是需要改一些东西 ...

啊?~这个,应该不需要的,应该直接可以用的~~~嗯嗯~~你会学校试试看吧~~嘿嘿~~

作者: sjl123    时间: 2013-6-5 15:02
♂ˇ邂逅√♀ 发表于 2013-6-3 23:43
哥们,别的不说,你看看你软件的右上角嚄,是HEX接收的,这个明显就是一个大问题啊~~~应该是字符串接收才 ...

奇怪,我今天测了一遍,一样的程序,这次HEX一直显示000000,字符的话,什么也不显示,就只能看到接受数在增加
作者: ♂ˇ邂逅√♀    时间: 2013-6-5 18:03
sjl123 发表于 2013-6-5 15:02
奇怪,我今天测了一遍,一样的程序,这次HEX一直显示000000,字符的话,什么也不显示,就只能看到接受数在 ...

嗯,那就好,说明连接什么的都正常。那现在只有两种可能:1是底层代码有问题,2是输出代码有问题。尝试一下先检查一下底层吧...咔咔~~

作者: sjl123    时间: 2013-6-5 18:20
♂ˇ邂逅√♀ 发表于 2013-6-5 18:03
嗯,那就好,说明连接什么的都正常。那现在只有两种可能:1是底层代码有问题,2是输出代码有问题。尝试一 ...

底层?怎么检查?不太会

作者: ♂ˇ邂逅√♀    时间: 2013-6-5 18:25
sjl123 发表于 2013-6-5 18:20
底层?怎么检查?不太会

啊!~对嚄~~你用的是K60的板子吧?你贴一下你的初始化代码、输出代码,来看看~~~

作者: sjl123    时间: 2013-6-5 18:56
♂ˇ邂逅√♀ 发表于 2013-6-5 18:25
啊!~对嚄~~你用的是K60的板子吧?你贴一下你的初始化代码、输出代码,来看看~~~

[attach]46586[/attach][attach]46585[/attach][attach]46584[/attach][attach]46583[/attach][attach]46582[/attach][attach]46581[/attach][attach]46580[/attach]这些吗

作者: ♂ˇ邂逅√♀    时间: 2013-6-5 19:00
呃,不是。这样吧,我贴代码出来好了~~~
比如,初始化代码:
uart_init (UART0,115200);//初始化串口0为波特率115200
输出的底层代码:
uart_putchar(UART0,‘1’);
这样子~~
作者: sjl123    时间: 2013-6-5 19:07
♂ˇ邂逅√♀ 发表于 2013-6-5 19:00
呃,不是。这样吧,我贴代码出来好了~~~
比如,初始化代码:
uart_init (UART0,115200);//初始化串口0为波 ...

野火宏定义部分:
#ifndef __K60_TOWER_H__
#define __K60_TOWER_H__

#include "mcg.h"

/*************************************************************************
*                             野火嵌入式开发工作室
*
*  功能说明:定义 printf函数 的 串口输出端口 和 串口信息
*  备    注:
*************************************************************************/
#define FIRE_PORT           UART0
#define FIRE_BAUD           9600

/*************************************************************************
*                             野火嵌入式开发工作室
*
*  功能说明:定义芯片型号
*  备    注:
*************************************************************************/
#define CPU_MK60N512VMD100



/*************************************************************************
*                             野火嵌入式开发工作室
*
*  功能说明:定义时钟频率
*  备    注:如果 MCG_CLK_MHZ 定义为 PLLUSR ,则初始化系统时用下面的自定义因子
*************************************************************************/
//#define NO_PLL_INIT
#define K60_CLK             1           // 使用外部时钟参考源
#define REF_CLK             XTAL8       // 没用到,但一些宏定义需要它

#define MCG_CLK_MHZ         PLL200      // 设置时钟频率
#define MAX_BUS_CLK         100         // bus不要超过200M,这里设为100M
#define MAX_FLASH_CLK       30          // flash不能超过32M,这里设为不超过30M

/*********************   自定义 时钟频率 分频因子   ********************/
#include "Fire_kinetis_MCG_CFG.h"   //参考这文件可以 选配 PRDIV、VDIV 。定义MCG分频因子 :
#define PRDIV             11        // MCG_CLK_MHZ = 50u/(PRDIV+1)*(VDIV+24)
#define VDIV              31
#define CORE_DIV          0         //  core = mcg/ ( CORE_DIV  + 1 )
#define BUS_DIV           0         //  bus  = mcg/ ( BUS_DIV   + 1 )
#define FLEX_DIV          0         //  flex = mcg/ ( FLEX_DIV  + 1 )
#define FLASH_DIV         9         //  flash= mcg/ ( FLASH_DIV + 1 )
/***********************************************************************/





#endif /* __K60_TOWER_H__ */





程序部分:
uart_init(UART0,9600);
ch=uart_getchar(UART0)
uart_pendchar (UART0,&ch)
uart_pendstr(UART0,str)

作者: ♂ˇ邂逅√♀    时间: 2013-6-5 19:27
ch=uart_getchar(UART0)
uart_pendchar (UART0,&ch)
uart_pendstr(UART0,str)

这三条语句不用,直接用
uart_putchar(UART0,‘1’);
试试看?
作者: sjl123    时间: 2013-6-5 19:32
♂ˇ邂逅√♀ 发表于 2013-6-5 19:27
ch=uart_getchar(UART0)
uart_pendchar (UART0,&ch)
uart_pendstr(UART0,str)

没,主函数是这样的void  main(void)
{
    char ch;
    char str[20];


    uart_init(UART0,9600);                     //初始化串口1,波特率为19200 ,波特率太大,容易不稳定
    printf("串口查询接收实验\n\n");             //发送提示信息
    printf("\t\t——野火kinetis开发板\n\n");

    while(1)
    {  
        /**********    测试无限等待接收    **********/
        printf("请发送数据:\n");     
        ch=uart_getchar(UART0);                  //从串口1中等待接收数据
        printf("你发送的字符为:%c\n\n",ch);     //从串口1中发送出去

        time_delay_ms(1000);                     //延时1s

        /**********    测试有限等待接收一个字符    **********/
        printf("快点发送字符哦,不等你的哦:\n");
        if(uart_pendchar (UART0,&ch))  printf("哈哈,赶得及哦!你发送的字符为:%c\n\n",ch);     //从串口1中发送出去
        else                           printf("o(︶︿︶)o 唉,赶不及了!收不到你的数据。\n\n");     //从串口1中发送出去

        time_delay_ms(1000);   


        /**********    测试有限等待接收字符串    **********/
        printf("快点发送字符串哦,不等你的哦:\n");
        if(uart_pendstr(UART0,str))
            printf("哈哈,赶得及哦!你发送的字符为:%s\n\n",str);     //从串口1中发送出去
        else
            printf("o(︶︿︶)o 唉,赶不及了!收不到你的数据。\n\n");     //从串口1中发送出去*/
    }
}



作者: ♂ˇ邂逅√♀    时间: 2013-6-5 20:14
sjl123 发表于 2013-6-5 19:32
没,主函数是这样的void  main(void)
{
    char ch;

哈哈!~楼主好萌...那个,不要发送中文,发送字符or字符串吖...而且,你这样,不确定到底是你发送除了问题还是接收除了问题嚄~~分别测试吖...

作者: sjl123    时间: 2013-6-5 20:28
♂ˇ邂逅√♀ 发表于 2013-6-5 20:14
哈哈!~楼主好萌...那个,不要发送中文,发送字符or字符串吖...而且,你这样,不确定到底是你发送除了问题 ...

这是野火的测试程序呢,不是我写的

作者: ♂ˇ邂逅√♀    时间: 2013-6-5 20:37
嗯,那
    //初始化默认配置       --TXD--      --RXD--     可以复用其他通道,请自行修改 uart_init
    UART0,    //           PTD7         PTD6
没接错吧?......
作者: sjl123    时间: 2013-6-5 20:37
♂ˇ邂逅√♀ 发表于 2013-6-5 20:14
哈哈!~楼主好萌...那个,不要发送中文,发送字符or字符串吖...而且,你这样,不确定到底是你发送除了问题 ...

你能帮我写个简短的例子吧,我现在就试一试

作者: sjl123    时间: 2013-6-5 20:40
♂ˇ邂逅√♀ 发表于 2013-6-5 20:37
嗯,那
    //初始化默认配置       --TXD--      --RXD--     可以复用其他通道,请自行修改 uart_init
...

恩,都是正确的,我用龙丘的测试程序非常好用,但是用野火的就不行

作者: ♂ˇ邂逅√♀    时间: 2013-6-5 22:14
sjl123 发表于 2013-6-5 20:37
你能帮我写个简短的例子吧,我现在就试一试

     uart_init(UART0,9600);
    while(1)
    {
      uart_putchar(UART0, uart_getchar(UART0));  
    }

你在main函数里面写这个,看看效果?

作者: sjl123    时间: 2013-6-5 22:53
♂ˇ邂逅√♀ 发表于 2013-6-5 20:37
嗯,那
    //初始化默认配置       --TXD--      --RXD--     可以复用其他通道,请自行修改 uart_init
...

我终于知道错哪了,晶振不对,我把晶振改成50就好了



core_clk_mhz = 50;  




作者: sjl123    时间: 2013-6-5 22:54
♂ˇ邂逅√♀ 发表于 2013-6-5 22:14
uart_init(UART0,9600);
    while(1)
    {

非常感谢你一直在帮我寻找问题,非常感谢你啊!!!!!




作者: ♂ˇ邂逅√♀    时间: 2013-6-5 22:57
sjl123 发表于 2013-6-5 22:54
非常感谢你一直在帮我寻找问题,非常感谢你啊!!!!!

啊,这样啊...好吧~~~没事,问题能解决了就好,哈!~~继续加油!~~~咔咔~~~

作者: pangfumin    时间: 2014-3-6 00:09
哥们,我现在遇见和你类似的情况,龙丘的板子,运行野火就不行,请问他们的晶振有什么区别




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