串口打印不能成功,顯示亂碼,請問是何原因呢?

測試GPIOA例程,串口打印不能成功,顯示亂碼,請問是何原因呢?

?

?

根據(jù)程序代碼里面的邏輯,板子上電后,會立即向串口0打印一條“GPIOA DEMO....”并回車換行,可是文本顯示模式 全是亂碼。不知道是和原因…… keil軟件上的“Target” 選項中已勾選了 Use MicroLIB,如下面的圖。板子上面跳線是圖中那樣的接法,程序肯定是跑起來了,PA口的燈(網(wǎng)口的綠燈是接的PAPA18)是200ms的閃爍


blob.png


blob.png


blob.png


blob.png


1、測試串口線自發(fā)自收是否正常

2、直接下載提供的例子【UART0】,測試是否正常


我測試了【UART0】里面的可以收發(fā),我發(fā)什么顯示什么,但是就在上電后,應(yīng)該顯示兩條

l am uart0!

IRQ sucess!

可是只有第一條是正常的,剩下的就是亂碼,我試了幾個串口調(diào)試助手

blob.png


開始以為是keil軟件有問題,就重新編譯了一次,下載進(jìn)去就是一樣,還是顯示亂碼


那些不是亂碼,是十六進(jìn)制數(shù)據(jù)

??? for( i = 0; i < 50; i++ )??? buf[ i ] = i;
??? UART0_SendStr(SEND_STRING );?????????????????????????????????????? /* 串口0發(fā)送字符串 */
??? UART0_SendByte(0xAA);?????????????????????????????????????????????????????? /* 串口0發(fā)送1字節(jié) */
??? UART0Send_FIFO( buf, 50 );????????????????????????????????????????????????? /* 啟用FIFO,發(fā)送50字節(jié)數(shù)據(jù) */

?

你是十六進(jìn)制查看就可以了。


恩恩, 是的! 我后來才發(fā)現(xiàn), 沒有認(rèn)真看程序,其實上電后,文本顯示的只有SEND_STRING


我測試了uart0 的例程,可以用, 我編譯后也可以用!?

唯獨其他的程序,一旦編譯串口就只打印十六進(jìn)制的00 只發(fā)送了一個字節(jié)


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

例子程序默認(rèn)沒開啟調(diào)試信息,如果需要,需定義宏 DEBUG 為真,定義位置在頭文件包含之前

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


恩, 現(xiàn)在問題已經(jīng)解決;

在#include “”的上面采用一個宏定義

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


還有一種方法就是 把要打印的那句函數(shù)PRINT改成小寫的“printf”即可

#define DEBUG ?1 從此句可以看出功能就是用“printf”來替換“PRINT”


這樣問題就迎刃而解了。


我也是用printf用不了,最后一急眼放棄了,現(xiàn)在用自己寫的U0send,也玩的很嗨皮。。。j_0013.gif


應(yīng)該是使用PRINT不能用吧?printf打印不會有問題的,要使用PRINT需要宏定義DEBUG


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频