智能车制作

标题: 求助!野火K60库的串口printf问题 [打印本页]

作者: 伊利奶茶粉    时间: 2012-12-18 22:41
标题: 求助!野火K60库的串口printf问题
今天调程序的时候打算串口看一下数据,用了野火库的printf函数,发现调试助手毫无反应……于是找到了火哥的例程如下:
void  main(void)
{
    uart_init(UART1, 19200);                                          //初始化串口
    printf("串口发送实验\n\n");                                       //使用printf来发送
    printf("\t\t——野火kinetis开发板\n\n");
    while(1)
    {
        uart_putchar (UART1, 'F');                                    //发送一个字符'F'
        uart_sendN (UART1, "uart_sendN\n", 11);                       //发送11个字符
        uart_sendStr (UART1, "uart_str函数发送数据");                 //发送字符串
        printf("\n-------------野火kinetis开发板-------------\n\n");  //使用printf来发送
        uart_sendStr (UART1, "uart_str函数发送数据");
        time_delay_ms(500);                                           //延时
    }
}
调试发现只有printf不好使,其他函数都能正常输出,貌似不是设置的问题啊?求各位大神指教一二,小弟不胜感激!

作者: 洋葱圈    时间: 2012-12-18 22:57
查看printf函数内部,看看是不是他有宏定义把函数体屏蔽了。如果还不行重新解压下他的工程包。
作者: 野火    时间: 2012-12-18 22:58
看教程,教程有写着的,我们的printf函数,通过宏定义来配置的。
k60_fire.h 下:
#define FIRE_PORT           UART3
#define FIRE_BAUD           19200

即printf是通过串口3来输出,bootloader的时候就初始化。
作者: 野火    时间: 2012-12-18 23:04
教程中有专门的讲printf函数的实现原理,以及重定向,重定向可以把 printf 输出到 LCD 等
当然,设置管脚的那部分也是有讲的:
[attach]37508[/attach]

作者: 伊利奶茶粉    时间: 2012-12-19 10:23
野火 发表于 2012-12-18 23:04
教程中有专门的讲printf函数的实现原理,以及重定向,重定向可以把 printf 输出到 LCD 等
当然,设置管脚的 ...

谢谢火哥!问题解决啦!
作者: 伊利奶茶粉    时间: 2012-12-19 10:24
洋葱圈 发表于 2012-12-18 22:57
查看printf函数内部,看看是不是他有宏定义把函数体屏蔽了。如果还不行重新解压下他的工程包。

谢大神指点!果然是一个宏定义错了
作者: 河边有棵树    时间: 2012-12-19 20:41
野火 发表于 2012-12-18 22:58
看教程,教程有写着的,我们的printf函数,通过宏定义来配置的。
k60_fire.h 下:
#define FIRE_PORT     ...

我了个檫原来是这样。。。怪不得一直弄不出来
作者: LOVECCEN    时间: 2013-3-10 19:29
野火 发表于 2012-12-18 22:58
看教程,教程有写着的,我们的printf函数,通过宏定义来配置的。
k60_fire.h 下:
#define FIRE_PORT     ...

终于找到原因了。。。

作者: 快乐的忧郁    时间: 2013-3-22 21:54
同样的问题在此得到解决,谢谢啊!
作者: riyuebo    时间: 2013-3-27 17:36
野火 发表于 2012-12-18 22:58
看教程,教程有写着的,我们的printf函数,通过宏定义来配置的。
k60_fire.h 下:
#define FIRE_PORT     ...

就是这个问题,野火的源代码主函数定义的是UART1,宏定义却是UART3,看来代码还是要好好研究一下。。。
作者: hpbfsj    时间: 2013-3-27 21:18
河边有棵树 发表于 2012-12-19 20:41
我了个檫原来是这样。。。怪不得一直弄不出来

我们的程序也是野火的用的是底层驱动,我看了   跟三天入门上一样的啊   不知道还要改什么地方   求指导   要在main里面加什么函数吗?

作者: hpbfsj    时间: 2013-3-27 21:22
请问楼主怎么解决的啊   求指导  我们也是用的是野火的底层驱动   我发现   我们的跟那三天人们的夜一样啊!  我们还是用串口看不了   !!!
作者: 野火    时间: 2013-3-27 22:17
riyuebo 发表于 2013-3-27 17:36
就是这个问题,野火的源代码主函数定义的是UART1,宏定义却是UART3,看来代码还是要好好研究一下。。。

printf 和其他串口输出可以不一样的,所以不行,要留意是否一样。我们的教程有讲到的


作者: 野火    时间: 2013-3-27 22:18
hpbfsj 发表于 2013-3-27 21:22
请问楼主怎么解决的啊   求指导  我们也是用的是野火的底层驱动   我发现   我们的跟那三天人们的夜一样啊! ...

串口,直接单片机IO管脚是不能接到usb转串口上的,还需要max3232

作者: 伊利奶茶粉    时间: 2013-3-28 07:45
hpbfsj 发表于 2013-3-27 21:22
请问楼主怎么解决的啊   求指导  我们也是用的是野火的底层驱动   我发现   我们的跟那三天人们的夜一样啊! ...

野火的程序如果你一字未改的话printf在宏定义里是uart3输出的,而其他函数都是用串口1输出,所以接收不到printf发出的数据了 改一下就行

作者: hpbfsj    时间: 2013-3-28 10:39
野火 发表于 2013-3-27 22:18
串口,直接单片机IO管脚是不能接到usb转串口上的,还需要max3232

我们一直用的都是USB转TTL 串口[attach]42883[/attach]这种不行吗??

作者: hpbfsj    时间: 2013-3-28 10:41
野火 发表于 2013-3-27 22:18
串口,直接单片机IO管脚是不能接到usb转串口上的,还需要max3232

而且 我们以前用那个的话   可以看到数据的  是龙丘的例程!
作者: 野火    时间: 2013-3-28 11:11
hpbfsj 发表于 2013-3-28 10:41
而且 我们以前用那个的话   可以看到数据的  是龙丘的例程!

那就是串口配置问题了

我们的启动信息是通过 printf 打印,在启动代码中打印的。
printf 函数的输出管脚配置及波特率设置可以看我们的三天入门教程

不同版本的例程可能有不同的管脚配置,请自己看自己的例程是设置多少,使用到什么端口。
另外,由于printf所用的端口已经在系统启动的时候初始化了,所以不需要再在 main函数里初始化串口,直接用printf所用的端口即可。



作者: hpbfsj    时间: 2013-3-28 12:00
野火 发表于 2013-3-28 11:11
那就是串口配置问题了

我们的启动信息是通过 printf 打印,在启动代码中打印的。

串口显示了  但是出现这种[attach]42892[/attach]   好像不对!

作者: hpbfsj    时间: 2013-3-28 12:03
野火 发表于 2013-3-28 11:11
那就是串口配置问题了

我们的启动信息是通过 printf 打印,在启动代码中打印的。

而且 不接陀螺仪的引脚   也是那样!
作者: 野火    时间: 2013-3-28 12:18
hpbfsj 发表于 2013-3-28 12:00
串口显示了  但是出现这种   好像不对!

检测一下波特率是否相同,如果printf函数与主函数用的是相同的管脚,可以不需要再在主函数里初始化。
你的主函数,打印的是什么数据?



作者: ﹎浅沫°    时间: 2013-4-20 20:41
已解决
作者: sjl123    时间: 2013-6-3 23:12
伊利奶茶粉 发表于 2012-12-19 10:23
谢谢火哥!问题解决啦!

这个问题如何改,发现屏蔽后?

作者: 自明了然    时间: 2013-6-26 16:34
洋葱圈 发表于 2012-12-18 22:57
查看printf函数内部,看看是不是他有宏定义把函数体屏蔽了。如果还不行重新解压下他的工程包。

请问拉普兰德的 LPLD_UART_PutChar();这个函数可以在超频下使用吗?例如
void main (void)
{
  

//LPLD_PLL_Setup(PLL_180);
  

    LPLD_UART_Init(UART1, 9600);
  while(1)
  {

          LPLD_UART_PutChar(UART1, 56);

  }
}
我一超频那句话打开,就收到的串口数据不正常,这是怎么回事?难道波特率9600不会随超频自动更改吗?

作者: 洋葱圈    时间: 2013-6-26 22:16
自明了然 发表于 2013-6-26 16:34
请问拉普兰德的 LPLD_UART_PutChar();这个函数可以在超频下使用吗?例如
void main (void)
{

设置波特率就行了,函数自动根据内核、总线频率设置。
作者: 天之晴    时间: 2013-8-21 23:00
怎么接串口线呢,RX,TX

作者: 艾瑞ge    时间: 2013-10-12 21:24
野火 发表于 2013-3-28 11:11
那就是串口配置问题了

我们的启动信息是通过 printf 打印,在启动代码中打印的。

野火哥,为什么我在main里面调用printf,串口调试助手一点反应没有?
作者: 野火    时间: 2013-10-12 22:04
艾瑞ge 发表于 2013-10-12 21:24
野火哥,为什么我在main里面调用printf,串口调试助手一点反应没有?

FIRE_PORT 和 FIRE_BAUD 是否配置正确?

作者: 艾瑞ge    时间: 2013-10-12 22:50
野火 发表于 2013-10-12 22:04
FIRE_PORT 和 FIRE_BAUD 是否配置正确?

设置对了,其实不只是printf用不了,我串口uart_sendN和uart_sendStr发出去都没有反应,找了好久也不知怎么回事

作者: 野火    时间: 2013-10-12 23:08
艾瑞ge 发表于 2013-10-12 22:50
设置对了,其实不只是printf用不了,我串口uart_sendN和uart_sendStr发出去都没有反应,找了好久也不知怎 ...

首先是 软件 原因: src\drivers\fire_drivers_cfg.h 里配置好  模块的管脚没有

硬件 原因,RX 和 TX 是不是 接错了?单片机提供的是 TTL 信号,需要 MAX3232 进行 电平转换,才能接入 串口接口。


作者: Eternalve    时间: 2013-11-20 19:17
野火 发表于 2013-3-28 11:11
那就是串口配置问题了

我们的启动信息是通过 printf 打印,在启动代码中打印的。

请问一下我想printf("PITCH:  %f",2.3);为什么输出是  
PITCH:  f             呢?
野火的库用哪个函数可以让串口发变量呀?









作者: yangjie1995    时间: 2013-11-24 18:53
野火 发表于 2012-12-18 22:58
看教程,教程有写着的,我们的printf函数,通过宏定义来配置的。
k60_fire.h 下:
#define FIRE_PORT     ...

请问一下用jlink下载野火k60,GPIO例程时为什么总会弹出界面显示找不到printf.c和crto.s文件呢,而且会有警告
Sun Nov 24, 2013 18:50:59: Skipping flash loading pass because there is no data in the designated range: 0x10000000-0x13FFFFFF.


作者: 野火    时间: 2013-11-24 19:13
yangjie1995 发表于 2013-11-24 18:53
请问一下用jlink下载野火k60,GPIO例程时为什么总会弹出界面显示找不到printf.c和crto.s文件呢,而且会有 ...

你修改过 工程路径,或者 别人电脑拷贝过来。

重新 rebuild 一下即可解决

作者: 我热死了夏天    时间: 2016-1-18 15:28
求野火的教程





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