能否在16位飞思卡尔MCU上使用printf打印字符到串口?(已解决)
本帖最后由 FSL_TICS_ZP 于 2014-6-27 11:38 编辑如题,以前使用STM32时,可以使用printf函数打印字符串到PC机上的串口调试助手显示出来。
使用STM32时,是要重定向一个函数,具体是什么函数我忘记了,总之是在里面加上发送到字符串到串口的内容。
现在我在使用飞思卡尔的16位MCU“MC9S12XHY256”,
(这个和MC9S12XS128类似,有些代码只需稍微改一下寄存器就可以移植的)
想使用printf打印一些调试过程的信息,有没有做过这个的朋友帮忙分析一下怎么弄,甚至分享一下源代码{:lol:}
自己顶一下,句子有点乱,大家将就看一下,大概就是这么个意思 51的都可以打印。。。只不过得自己写串口函数 yzb1019 发表于 2014-6-25 10:06
51的都可以打印。。。只不过得自己写串口函数
51的是怎么打印的,不会要写printf函数吧? 其实我都是先输出变量名称,然后再输出变量结果,挨着就行了,普通的字符发送函数就可以了 可以的,要调用stdio库,然后重新定义一下putc函数,16位的编译器就没用过了,但别的都是这么干的! wangpengcheng 发表于 2014-6-25 10:18
可以的,要调用stdio库,然后重新定义一下putc函数,16位的编译器就没用过了,但别的都是这么干的! ...
嗯,刚才编译器提醒我putc函数没有定义 yzb1019 发表于 2014-6-25 10:11
其实我都是先输出变量名称,然后再输出变量结果,挨着就行了,普通的字符发送函数就可以了 ...
哈哈,现在我也是这么干的,不过字符转换不方便,所以才想要printf函数 hck2llj 发表于 2014-6-25 10:28
嗯,刚才编译器提醒我putc函数没有定义
那你自己写个putc函数应该就可以用了! hck2llj 发表于 2014-6-25 10:07
51的是怎么打印的,不会要写printf函数吧?
记得C51好像串口配置好后,定义stdio.h头文件,就可以调用啊,
hck2llj 发表于 2014-6-25 10:29
哈哈,现在我也是这么干的,不过字符转换不方便,所以才想要printf函数
除了wangpengcheng的方法,我推荐你可以使用CW的PE功能,配置好串口,可以直接使用Printf函数。 如果编程能力强 直接实现变参数 函数 也是不错的选择 FSL_TICS_ZP 发表于 2014-6-25 14:07
记得C51好像串口配置好后,定义stdio.h头文件,就可以调用啊,
还有这种事,真心不懂啊 FSL_TICS_ZP 发表于 2014-6-25 14:09
除了wangpengcheng的方法,我推荐你可以使用CW的PE功能,配置好串口,可以直接使用Printf函数。 ...
CW的PE功能怎么使用?{:sad:} rootxie 发表于 2014-6-25 15:00
如果编程能力强 直接实现变参数 函数 也是不错的选择
正因为不强,才来发帖{:mad:} hck2llj 发表于 2014-6-25 15:40
CW的PE功能怎么使用?
你有装CW吗? FSL_TICS_ZP 发表于 2014-6-25 15:41
你有装CW吗?
嗯,装有的 本帖最后由 FSL_TICS_ZP 于 2014-6-25 15:54 编辑
那你在建立工程时,如果选择使能PE功能,就可以使用PE内的组件啊。
你通过以下链接了解Processor Expert 的相关功能。
http://www.amobbs.com/thread-5557147-1-1.html FSL_TICS_ZP 发表于 2014-6-25 15:51
那你在建立工程时,如果选择使能PE功能,就可以使用PE内的组件啊。
你通过以下链接了解Processor Expert 的 ...
好的,谢谢啊 FSL_TICS_ZP 发表于 2014-6-25 15:51
那你在建立工程时,如果选择使能PE功能,就可以使用PE内的组件啊。
你通过以下链接了解Processor Expert 的 ...
我去尝试过用在keil里面使用printf,感觉挺好用的。
不过CW的PE目前用不了,不支持MC9S12XHY256。
说一下我这个的吧,现在我使用printf函数,只简单的嵌入“stdio.h”头文件,编译的时候提示以下内容:
Link Error : L1822: Symbol TERMIO_PutChar in file C:\Program Files\Freescale\CWS12v5.1\lib\HC12c\lib\ansixbi.lib is undefined
版主,我该怎么办呢?
解决了,现在分享一下吧。
CPU:MC9S12XHY256
CW版本:Code Warrior 5.1
解决办法:
(1)先初始化串口
void SCI_Config(unsigned int Baud_Rate)
{
U16 BaudRatePrescaler;
BaudRatePrescaler = (U16)(32000000L / (16L * Baud_Rate));
/* set SCI0 baud rate */
SCI0BDH = (unsigned char)((BaudRatePrescaler>>8));
SCI0BDL = (unsigned char)(BaudRatePrescaler);
/* set SCI0 control register 1 */
SCI0CR1 = 0x00;
/* enable SCI0 transmit and receive */
/* enable Receiver Full Interrupt */
SCI0CR2 = 0x2C;
}
(2)在后面加上这个函数
void TERMIO_PutChar(char ch)
{
/* check SCI0 transmit data register is empty */
while(SCI0SR1_TDRE == 0)
{
}
SCI0DRL = ch;
}
(3)加入头文件“stdio.h”
(4)直接调用printf就可以打印到串口了
==========================
很开心,谢谢大家的关心{:lol:} 好像不能编辑标题了,我想在在后面加上”(已解决)“,楼主位也不能编辑了。
那我在这里加上吧。
=========================================
问题已解决,方法在21楼,大家可以参考一下。
=========================================
{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:} hck2llj 发表于 2014-6-27 10:52
我去尝试过用在keil里面使用printf,感觉挺好用的。
不过CW的PE目前用不了,不支持MC9S12XHY256。
说一下 ...
你好,CW的PE是支持MC9S12XHY256的,我刚刚确认过啊!你的CW版本是什么? hck2llj 发表于 2014-6-27 11:20
好像不能编辑标题了,我想在在后面加上”(已解决)“,楼主位也不能编辑了。
那我在这里加上吧。
还是恭喜啊,我来标记已解决吧! FSL_TICS_ZP 发表于 2014-6-27 11:35
你好,CW的PE是支持MC9S12XHY256的,我刚刚确认过啊!你的CW版本是什么?
是5.1版本 FSL_TICS_ZP 发表于 2014-6-27 11:38
还是恭喜啊,我来标记已解决吧!
{:shy:}
谢谢版主大大的大力支持,关于PE,这个项目做完之后我要好好看看。
毕竟接触一款新的MCU,都去看数据手册写底层的话太麻烦了。
我之前用的瑞萨MCU,就有代码生成器的,想不到飞思卡尔也有了,可喜可贺! hck2llj 发表于 2014-6-27 11:52
是5.1版本
哦,估计一是在安装时没有选择对应16bitMCU支持,或者5.1版本没有吧此芯片更新进来,但幸运是问题解决啊,
以后有什么问题再交流! 在16位飞思卡尔MCU上使用printf打印字符到串口 FSL_TICS_ZP 发表于 2014-6-27 11:56
哦,估计一是在安装时没有选择对应16bitMCU支持,或者5.1版本没有吧此芯片更新进来,但幸运是问题解决啊 ...
好的,一定!
如果有好的东西我也会拿出来分享的{:lol:} hck2llj 发表于 2014-6-27 12:16
好的,一定!
如果有好的东西我也会拿出来分享的
好的,以后关于飞思卡尔的产品欢迎来论坛讨论! 在iar 环境中,调用一下stdio.h,重新定位一下putc函数,在lib选项中选full模式,就能打印了 含情别问我 发表于 2014-6-29 00:14
在iar 环境中,调用一下stdio.h,重新定位一下putc函数,在lib选项中选full模式,就能打印了 ...
嗯,好的,如果以后用到IAR的话,我会试试看的。谢谢啊{:tongue:} hck2llj 发表于 2014-6-27 11:17
解决了,现在分享一下吧。
CPU:MC9S12XHY256
CW版本:Code Warrior 5.1
怎么弄的,怎么还是用不了printf?
页:
[1]