串口打印不能成功,显示乱码,请问是何原因呢?

测试GPIOA例程,串口打印不能成功,显示乱码,请问是何原因呢?

 

 

根据程序代码里面的逻辑,板子上电后,会立即向串口0打印一条“GPIOA DEMO....”并回车换行,可是文本显示模式 全是乱码。不知道是和原因…… keil软件上的“Target” 选项中已勾选了 Use MicroLIB,如下面的图。板子上面跳线是图中那样的接法,程序肯定是跑起来了,PA口的灯(网口的绿灯是接的PAPA18)是200ms的闪烁


blob.png


blob.png


blob.png


blob.png


1、测试串口线自发自收是否正常

2、直接下载提供的例子【UART0】,测试是否正常


我测试了【UART0】里面的可以收发,我发什么显示什么,但是就在上电后,应该显示两条

l am uart0!

IRQ sucess!

可是只有第一条是正常的,剩下的就是乱码,我试了几个串口调试助手

blob.png


开始以为是keil软件有问题,就重新编译了一次,下载进去就是一样,还是显示乱码


那些不是乱码,是十六进制数据

    for( i = 0; i < 50; i++ )    buf[ i ] = i;
    UART0_SendStr(SEND_STRING );                                       /* 串口0发送字符串 */
    UART0_SendByte(0xAA);                                                       /* 串口0发送1字节 */
    UART0Send_FIFO( buf, 50 );                                                  /* 启用FIFO,发送50字节数据 */

 

你是十六进制查看就可以了。


恩恩, 是的! 我后来才发现, 没有认真看程序,其实上电后,文本显示的只有SEND_STRING


我测试了uart0 的例程,可以用, 我编译后也可以用! 

唯独其他的程序,一旦编译串口就只打印十六进制的00 只发送了一个字节


#if  DEBUG
#define PRINT(X...) printf(X)
#else
#define PRINT(X...)
#endif

例子程序默认没开启调试信息,如果需要,需定义宏 DEBUG 为真,定义位置在头文件包含之前

/* 头文件包含 */
#include
#include
#include "CH563SFR.H"
#include "SYSFREQ.H"


恩, 现在问题已经解决;

在#include “”的上面采用一个宏定义

#define DEBUG  1 就可以串口打印了


还有一种方法就是 把要打印的那句函数PRINT改成小写的“printf”即可

#define DEBUG  1 从此句可以看出功能就是用“printf”来替换“PRINT”


这样问题就迎刃而解了。


我也是用printf用不了,最后一急眼放弃了,现在用自己写的U0send,也玩的很嗨皮。。。j_0013.gif


应该是使用PRINT不能用吧?printf打印不会有问题的,要使用PRINT需要宏定义DEBUG


只有登录才能回复,可以选择微信账号登录