hck2llj 发表于 2014-6-25 09:58:52

能否在16位飞思卡尔MCU上使用printf打印字符到串口?(已解决)

本帖最后由 FSL_TICS_ZP 于 2014-6-27 11:38 编辑

如题,以前使用STM32时,可以使用printf函数打印字符串到PC机上的串口调试助手显示出来。
使用STM32时,是要重定向一个函数,具体是什么函数我忘记了,总之是在里面加上发送到字符串到串口的内容。
现在我在使用飞思卡尔的16位MCU“MC9S12XHY256”,
(这个和MC9S12XS128类似,有些代码只需稍微改一下寄存器就可以移植的)
想使用printf打印一些调试过程的信息,有没有做过这个的朋友帮忙分析一下怎么弄,甚至分享一下源代码{:lol:}

hck2llj 发表于 2014-6-25 10:00:53

自己顶一下,句子有点乱,大家将就看一下,大概就是这么个意思

yzb1019 发表于 2014-6-25 10:06:19

51的都可以打印。。。只不过得自己写串口函数

hck2llj 发表于 2014-6-25 10:07:25

yzb1019 发表于 2014-6-25 10:06
51的都可以打印。。。只不过得自己写串口函数

51的是怎么打印的,不会要写printf函数吧?

yzb1019 发表于 2014-6-25 10:11:14

其实我都是先输出变量名称,然后再输出变量结果,挨着就行了,普通的字符发送函数就可以了

wangpengcheng 发表于 2014-6-25 10:18:07

可以的,要调用stdio库,然后重新定义一下putc函数,16位的编译器就没用过了,但别的都是这么干的!

hck2llj 发表于 2014-6-25 10:28:37

wangpengcheng 发表于 2014-6-25 10:18
可以的,要调用stdio库,然后重新定义一下putc函数,16位的编译器就没用过了,但别的都是这么干的! ...

嗯,刚才编译器提醒我putc函数没有定义

hck2llj 发表于 2014-6-25 10:29:22

yzb1019 发表于 2014-6-25 10:11
其实我都是先输出变量名称,然后再输出变量结果,挨着就行了,普通的字符发送函数就可以了 ...

哈哈,现在我也是这么干的,不过字符转换不方便,所以才想要printf函数

wangpengcheng 发表于 2014-6-25 10:29:34

hck2llj 发表于 2014-6-25 10:28
嗯,刚才编译器提醒我putc函数没有定义

那你自己写个putc函数应该就可以用了!

FSL_TICS_ZP 发表于 2014-6-25 14:07:54

hck2llj 发表于 2014-6-25 10:07
51的是怎么打印的,不会要写printf函数吧?

记得C51好像串口配置好后,定义stdio.h头文件,就可以调用啊,

FSL_TICS_ZP 发表于 2014-6-25 14:09:05

hck2llj 发表于 2014-6-25 10:29
哈哈,现在我也是这么干的,不过字符转换不方便,所以才想要printf函数

除了wangpengcheng的方法,我推荐你可以使用CW的PE功能,配置好串口,可以直接使用Printf函数。

rootxie 发表于 2014-6-25 15:00:27

如果编程能力强 直接实现变参数 函数 也是不错的选择

hck2llj 发表于 2014-6-25 15:39:57

FSL_TICS_ZP 发表于 2014-6-25 14:07
记得C51好像串口配置好后,定义stdio.h头文件,就可以调用啊,

还有这种事,真心不懂啊

hck2llj 发表于 2014-6-25 15:40:15

FSL_TICS_ZP 发表于 2014-6-25 14:09
除了wangpengcheng的方法,我推荐你可以使用CW的PE功能,配置好串口,可以直接使用Printf函数。 ...

CW的PE功能怎么使用?{:sad:}

hck2llj 发表于 2014-6-25 15:40:43

rootxie 发表于 2014-6-25 15:00
如果编程能力强 直接实现变参数 函数 也是不错的选择

正因为不强,才来发帖{:mad:}

FSL_TICS_ZP 发表于 2014-6-25 15:41:06

hck2llj 发表于 2014-6-25 15:40
CW的PE功能怎么使用?

你有装CW吗?

hck2llj 发表于 2014-6-25 15:41:31

FSL_TICS_ZP 发表于 2014-6-25 15:41
你有装CW吗?

嗯,装有的

FSL_TICS_ZP 发表于 2014-6-25 15:51:54

本帖最后由 FSL_TICS_ZP 于 2014-6-25 15:54 编辑

那你在建立工程时,如果选择使能PE功能,就可以使用PE内的组件啊。
你通过以下链接了解Processor Expert 的相关功能。
http://www.amobbs.com/thread-5557147-1-1.html

hck2llj 发表于 2014-6-25 16:09:37

FSL_TICS_ZP 发表于 2014-6-25 15:51
那你在建立工程时,如果选择使能PE功能,就可以使用PE内的组件啊。
你通过以下链接了解Processor Expert 的 ...

好的,谢谢啊

hck2llj 发表于 2014-6-27 10:52:50

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

版主,我该怎么办呢?

hck2llj 发表于 2014-6-27 11:17:24

解决了,现在分享一下吧。
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:}

hck2llj 发表于 2014-6-27 11:20:51

好像不能编辑标题了,我想在在后面加上”(已解决)“,楼主位也不能编辑了。
那我在这里加上吧。

=========================================
问题已解决,方法在21楼,大家可以参考一下。
=========================================

{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}{:funk:}

FSL_TICS_ZP 发表于 2014-6-27 11:35:58

hck2llj 发表于 2014-6-27 10:52
我去尝试过用在keil里面使用printf,感觉挺好用的。
不过CW的PE目前用不了,不支持MC9S12XHY256。
说一下 ...

你好,CW的PE是支持MC9S12XHY256的,我刚刚确认过啊!你的CW版本是什么?

FSL_TICS_ZP 发表于 2014-6-27 11:38:13

hck2llj 发表于 2014-6-27 11:20
好像不能编辑标题了,我想在在后面加上”(已解决)“,楼主位也不能编辑了。
那我在这里加上吧。



还是恭喜啊,我来标记已解决吧!

hck2llj 发表于 2014-6-27 11:52:18

FSL_TICS_ZP 发表于 2014-6-27 11:35
你好,CW的PE是支持MC9S12XHY256的,我刚刚确认过啊!你的CW版本是什么?

是5.1版本

hck2llj 发表于 2014-6-27 11:53:35

FSL_TICS_ZP 发表于 2014-6-27 11:38
还是恭喜啊,我来标记已解决吧!

{:shy:}
谢谢版主大大的大力支持,关于PE,这个项目做完之后我要好好看看。
毕竟接触一款新的MCU,都去看数据手册写底层的话太麻烦了。
我之前用的瑞萨MCU,就有代码生成器的,想不到飞思卡尔也有了,可喜可贺!

FSL_TICS_ZP 发表于 2014-6-27 11:56:52

hck2llj 发表于 2014-6-27 11:52
是5.1版本

哦,估计一是在安装时没有选择对应16bitMCU支持,或者5.1版本没有吧此芯片更新进来,但幸运是问题解决啊,
以后有什么问题再交流!

songjie 发表于 2014-6-27 12:12:51

在16位飞思卡尔MCU上使用printf打印字符到串口

hck2llj 发表于 2014-6-27 12:16:31

FSL_TICS_ZP 发表于 2014-6-27 11:56
哦,估计一是在安装时没有选择对应16bitMCU支持,或者5.1版本没有吧此芯片更新进来,但幸运是问题解决啊 ...

好的,一定!
如果有好的东西我也会拿出来分享的{:lol:}

FSL_TICS_ZP 发表于 2014-6-27 13:41:15

hck2llj 发表于 2014-6-27 12:16
好的,一定!
如果有好的东西我也会拿出来分享的

好的,以后关于飞思卡尔的产品欢迎来论坛讨论!

含情别问我 发表于 2014-6-29 00:14:12

在iar 环境中,调用一下stdio.h,重新定位一下putc函数,在lib选项中选full模式,就能打印了

hck2llj 发表于 2014-6-30 09:13:44

含情别问我 发表于 2014-6-29 00:14
在iar 环境中,调用一下stdio.h,重新定位一下putc函数,在lib选项中选full模式,就能打印了 ...

嗯,好的,如果以后用到IAR的话,我会试试看的。谢谢啊{:tongue:}

glutzsy 发表于 2017-9-8 14:24:24

hck2llj 发表于 2014-6-27 11:17
解决了,现在分享一下吧。
CPU:MC9S12XHY256
CW版本:Code Warrior 5.1


怎么弄的,怎么还是用不了printf?
页: [1]
查看完整版本: 能否在16位飞思卡尔MCU上使用printf打印字符到串口?(已解决)