搜索
bottom↓
回复: 32

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

[复制链接]

出0入0汤圆

发表于 2014-6-25 09:58:52 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZP 于 2014-6-27 11:38 编辑

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

出0入0汤圆

 楼主| 发表于 2014-6-25 10:00:53 | 显示全部楼层
自己顶一下,句子有点乱,大家将就看一下,大概就是这么个意思

出0入0汤圆

发表于 2014-6-25 10:06:19 | 显示全部楼层
51的都可以打印。。。只不过得自己写串口函数

出0入0汤圆

 楼主| 发表于 2014-6-25 10:07:25 | 显示全部楼层
yzb1019 发表于 2014-6-25 10:06
51的都可以打印。。。只不过得自己写串口函数

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-6-25 10:29:34 | 显示全部楼层
hck2llj 发表于 2014-6-25 10:28
嗯,刚才编译器提醒我putc函数没有定义

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

出0入0汤圆

发表于 2014-6-25 14:07:54 | 显示全部楼层
hck2llj 发表于 2014-6-25 10:07
51的是怎么打印的,不会要写printf函数吧?

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

出0入0汤圆

发表于 2014-6-25 14:09:05 | 显示全部楼层
hck2llj 发表于 2014-6-25 10:29
哈哈,现在我也是这么干的,不过字符转换不方便,所以才想要printf函数

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

出0入0汤圆

发表于 2014-6-25 15:00:27 | 显示全部楼层
如果编程能力强 直接实现变参数 函数 也是不错的选择

出0入0汤圆

 楼主| 发表于 2014-6-25 15:39:57 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-6-25 14:07
记得C51好像串口配置好后,定义stdio.h头文件,就可以调用啊,

还有这种事,真心不懂啊

出0入0汤圆

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

CW的PE功能怎么使用?

出0入0汤圆

 楼主| 发表于 2014-6-25 15:40:43 | 显示全部楼层
rootxie 发表于 2014-6-25 15:00
如果编程能力强 直接实现变参数 函数 也是不错的选择

正因为不强,才来发帖

出0入0汤圆

发表于 2014-6-25 15:41:06 | 显示全部楼层
hck2llj 发表于 2014-6-25 15:40
CW的PE功能怎么使用?

你有装CW吗?

出0入0汤圆

 楼主| 发表于 2014-6-25 15:41:31 | 显示全部楼层

嗯,装有的

出0入0汤圆

发表于 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

出0入0汤圆

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

好的,谢谢啊

出0入0汤圆

 楼主| 发表于 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

版主,我该怎么办呢?

出0入0汤圆

 楼主| 发表于 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就可以打印到串口了

==========================
很开心,谢谢大家的关心

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 2014-6-27 11:52:18 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-6-27 11:35
你好,CW的PE是支持MC9S12XHY256的,我刚刚确认过啊!你的CW版本是什么?

是5.1版本

出0入0汤圆

 楼主| 发表于 2014-6-27 11:53:35 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-6-27 11:38
还是恭喜啊,我来标记已解决吧!


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

出0入0汤圆

发表于 2014-6-27 11:56:52 | 显示全部楼层

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

出0入0汤圆

发表于 2014-6-27 12:12:51 | 显示全部楼层
在16位飞思卡尔MCU上使用printf打印字符到串口

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-6-27 13:41:15 | 显示全部楼层
hck2llj 发表于 2014-6-27 12:16
好的,一定!
如果有好的东西我也会拿出来分享的

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

出0入0汤圆

发表于 2014-6-29 00:14:12 | 显示全部楼层
在iar 环境中,调用一下stdio.h,重新定位一下putc函数,在lib选项中选full模式,就能打印了

出0入0汤圆

 楼主| 发表于 2014-6-30 09:13:44 | 显示全部楼层
含情别问我 发表于 2014-6-29 00:14
在iar 环境中,调用一下stdio.h,重新定位一下putc函数,在lib选项中选full模式,就能打印了 ...

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

出0入0汤圆

发表于 2017-9-8 14:24:24 | 显示全部楼层
hck2llj 发表于 2014-6-27 11:17
解决了,现在分享一下吧。
CPU:MC9S12XHY256
CW版本:Code Warrior 5.1

怎么弄的,怎么还是用不了printf?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 07:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表