OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17889|回复: 9

串口实验printf输出是乱码

[复制链接]

27

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2012-7-17
在线时间
0 小时
发表于 2012-8-31 15:50:42 | 显示全部楼层 |阅读模式
按照代码输出的时候如图显示,求解决


 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2012-8-16
在线时间
0 小时
发表于 2012-9-2 08:06:17 | 显示全部楼层
网上找的一些解决办法,我也遇到过,我是通过办法2解决的,希望能帮到你:
   问题1(与编译软件无关):在程序中加入printf语句实现串口输出,但未写重定向函数fputc,出现编译无任何警号和错误直接下载无法运行,软件仿真可以运行至MAIN函数,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”处无法继续运行。

解决办法:编写fputc函数如下:
int fputc(int ch, FILE *f)
{
          USART_SendData(USART1, (uint8_t) ch);
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
        {}
        return ch;
}

问题2(与编译软件有关):重定向函数fputc编写无误,使用的是MDK4.22-3.40之间的编译环境,未使用微库,即MiclroLIB,因printf()之类的函数,使用了半主机模式。使用微库的话,不会使用半主机模式,所以就没有问题。

解决办法:在option for target->target 对话框中,选择Use MiclroLIB,重新编译程序即可。

问题3:重定向函数fputc编写无误,不用微库,即MiclroLIB,依然可以使用printf

解决办法:
在程序中加入如下语句:
#pragma import(__use_no_semihosting)
_sys_exit(int x)
{
x = x;
}
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;

此代码功能用于避免使用semhosting(半主机模式)

问题4:使用的是MDK4.22-3.40之间的编译环境,不想使用微库,也不想加入问题三语句。

解决办法:
更换低版本的MDK,3.4以下吧,本人试验使用mdk3.24不勾选MiclroLIB,也不加入问题三语句,能够正常使用printf,无任何问题。
My?kungfu?skills?with?the?stuff?of?legend.
回复 支持 2 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-8-31 19:56:49 | 显示全部楼层
用SSCOM试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2012-9-7
在线时间
0 小时
发表于 2012-9-8 00:13:49 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
求助!我在串口实验中用的是win7系统,用sscom,刚开始是无法发送信息,后来按了发送新行和重新烧录,发现刷新的字都是乱码,而且无法发送信息,请问是什么问题?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-9-8 01:20:19 | 显示全部楼层
回复【4楼】雷雨天:
---------------------------------
波特率没设置对吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-8-4
在线时间
13 小时
发表于 2014-1-2 19:35:00 | 显示全部楼层
我把波特率改高就好了,发送的太快了

回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2012-4-26
在线时间
1 小时
发表于 2014-5-9 10:36:58 | 显示全部楼层
mark.....
.
回复 支持 反对

使用道具 举报

3

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-7-29
在线时间
0 小时
发表于 2015-9-6 21:35:12 | 显示全部楼层
回复【3楼】猛龙过江:
---------------------------------
谢谢分享! 问题已解决!
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-9-15
在线时间
2 小时
发表于 2015-11-4 22:19:53 | 显示全部楼层
回复【4楼】雷雨天:
---------------------------------
你好,你的问题解决了吗,我也遇到这样的问题了
I Can!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-1-30
在线时间
4 小时
发表于 2016-9-12 17:38:27 | 显示全部楼层
好老段帖子,刚刚跑freertos的时候也发现这个问题,换sscom就好了。用友善串口经常乱码。
软件工程师
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 15:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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