標(biāo)題:
求助:STC32G單片機使用printf函數(shù)串口發(fā)送數(shù)據(jù)失敗
[打印本頁]
作者:
TP801
時間:
2024-9-21 18:19
標(biāo)題:
求助:STC32G單片機使用printf函數(shù)串口發(fā)送數(shù)據(jù)失敗
請教各位大神:
近期學(xué)習(xí)STC32G12K128單片機,使用printf函數(shù)發(fā)送數(shù)據(jù)失敗了。原程序在STC其它系列的8位機上運行均沒有問題。按理說,在STG32上運行時,只要把頭文件更換即可,但是為什么串口不能通訊呢?懇請指點,謝謝大家! 使用串口1通訊,定時器1為波特率發(fā)生器,上位機發(fā)送字符v,單片機回發(fā)各種字符,代碼如下:
/*試驗printf串口發(fā)送字符*/
#include<STC32G.H>
# include<stdio.h>
#include "intrins.h"
//# include<reg52.h>
//# include "STC12C5A60S2.h"
void ConfigUART(unsigned int baud);
unsigned char RxdByte = 0x00;
void printstar()
{
printf("********************************\n");
}
void print_message()
{
printf("hello world"); //
printf("How do you do!\n");
printf("歡迎學(xué)習(xí)STC51單片機\n");
}
void main()
{
ConfigUART(9600); //配置T1波特率為9600
EA=1;
WTST = 0; //CPU讀取儲存器的等待時間控制
EAXFR = 1; //使能訪問XFR
CKCON = 0x00; //外部數(shù)據(jù)總線為最快
while(1)
if (RxdByte == 'v') //v代表有數(shù)據(jù)請求
{
RxdByte=0; //清零
ES=0; //可以不要
TI=1; //TI必須置1
printf("學(xué)習(xí)STG32單片機\n");
printstar();
print_message();
printstar();
TI=0; //此程序中可以不要
ES=1; //可以不要
}
else
{
}
}
/* 串口配置函數(shù),baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
SCON = 0x50; //配置串口為模式1
TMOD &= 0x0F; //清零T1的控制位
TMOD |= 0x20; //配置T1為模式2,波特率發(fā)生器
TH1 = 256 - (11059200/12/32)/baud; //計算T1重載值
TL1 = TH1; //初值等于重載值
ET1 = 0; //禁止T1中斷
ES = 1; //使能串口中斷
TR1 = 1; //啟動T1
}
/* UART中斷服務(wù)函數(shù) */
void InterruptUART() interrupt 4
{
if (RI) //接收到字節(jié)
{
RI = 0; //清零接收中斷標(biāo)志位
RxdByte = SBUF; //接收到的數(shù)據(jù)保存到接收字節(jié)變量中
}
}
作者:
coody_sz
時間:
2024-9-21 23:00
你那拿老51的程序放在STC32G上要修改一下的,建議從STC官方下載例程測試學(xué)習(xí)。
作者:
lkc8210
時間:
2024-9-22 10:57
你都沒有重定向putchar, 怎么會成功?
2024-09-22_105728.png
(4.67 KB, 下載次數(shù): 4)
下載附件
2024-9-22 10:57 上傳
作者:
TP801
時間:
2024-9-28 11:59
感謝大家指點,現(xiàn)已解決。主要是存在兩個問題:
1)C251編譯設(shè)置有問題,應(yīng)該把Momory Model的設(shè)置為:XSmall:near vars,far const,prt-4。
2)STC32G里,串口1默認T2作為波特率發(fā)生器,如果使用T1作為波特率發(fā)生器,應(yīng)關(guān)閉T2的波特率設(shè)置位,即S1BRT = 0。
重定向putchar,還沒有試,再次感謝!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1