久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1067|回復: 3
收起左側

求助:STC32G單片機使用printf函數(shù)串口發(fā)送數(shù)據(jù)失敗

[復制鏈接]
ID:1111014 發(fā)表于 2024-9-21 18:19 | 顯示全部樓層 |閱讀模式
請教各位大神:
      近期學習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("歡迎學習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("學習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中斷服務函數(shù) */
void InterruptUART() interrupt 4
{
    if (RI)                                                                  //接收到字節(jié)
    {
        RI = 0;                                                          //清零接收中斷標志位
        RxdByte = SBUF;                    //接收到的數(shù)據(jù)保存到接收字節(jié)變量中
    }          
}


回復

使用道具 舉報

ID:1034262 發(fā)表于 2024-9-21 23:00 | 顯示全部樓層
你那拿老51的程序放在STC32G上要修改一下的,建議從STC官方下載例程測試學習。
回復

使用道具 舉報

ID:161164 發(fā)表于 2024-9-22 10:57 | 顯示全部樓層
你都沒有重定向putchar, 怎么會成功? 2024-09-22_105728.png

回復

使用道具 舉報

ID:1111014 發(fā)表于 2024-9-28 11:59 | 顯示全部樓層
感謝大家指點,現(xiàn)已解決。主要是存在兩個問題:
1)C251編譯設置有問題,應該把Momory Model的設置為:XSmall:near vars,far const,prt-4。
2)STC32G里,串口1默認T2作為波特率發(fā)生器,如果使用T1作為波特率發(fā)生器,應關閉T2的波特率設置位,即S1BRT = 0。
重定向putchar,還沒有試,再次感謝!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区二区二区 | 超碰免费在线 | 成人午夜免费福利视频 | av不卡一区 | 国产激情三区 | 欧美精品福利 | 99久视频 | 亚洲一区二区三区欧美 | 天天爽夜夜爽精品视频婷婷 | 精品久久久久久亚洲精品 | 日本精品久久 | 免费看一级毛片 | 日韩欧美一区二区三区在线播放 | 欧美国产日韩在线观看 | 99热激情| 色爱综合网| 久久国产高清 | 色综合久久久久 | 欧美精品一级 | 成人精品一区二区三区中文字幕 | 中文字幕一区二区三区四区五区 | 国产97碰免费视频 | 天堂va在线观看 | 91就要激情 | 伊人精品在线 | 中文字幕四虎 | 男女在线免费观看 | 精品成人一区二区 | 欧美一区二区三区在线视频 | 亚洲二区在线 | 亚洲精品久久久久中文字幕欢迎你 | 影视一区| 日日夜夜精品视频 | 懂色av蜜桃av | 毛片久久久 | 91大神xh98xh系列全部 | 欧美aaaaaaaaaa | 九九热最新视频 | 免费观看毛片 | 欧美一区二区三区视频 | 丝袜 亚洲 欧美 日韩 综合 |