newlined 发表于 2026-1-7 11:47:57

请教大家:初始化时,串行口的发,比如串口1的TXD,必须置高吗?

如题,为了测试串口,我写了如下程序:



#include "STC32G.h"

void Port_Mode()
{
        P3M1=0x00;        P3M0=0x00;
        P3=0x00;
}

void Uart1_Init(void)                                //9600bps@12.000MHz
{                       
        SCON = 0x50;                                //8位数据,可变波特率
        AUXR |= 0x01;                                //串口1选择定时器2为波特率发生器
        AUXR |= 0x04;                                //定时器时钟1T模式
        T2L = 0xC7;                                //设置定时初始值
        T2H = 0xFE;                                //设置定时初始值
        AUXR |= 0x10;                                //定时器2开始计时
       
        ES   = 1;                                        // 开串口1中断
        TI=0;
}
void UART1(void) interrupt 4              // 串行口1中断函数
{
        if (RI)
        {
                RI=0;
        }       
}

void main()
{
        Port_Mode();
        Uart1_Init();                                        //9600bps@12.000MHz
        EA=1;
        while(1)
        {       
                SBUF=0x55;
                while(!TI);
                TI=0;
        }
}


不想,串口调不通,在把函数 Port_Mode()中 P3=0x00;改为P3=0x02;后可以了,串口的2个管脚我设为准双向,这2个管脚的初始值我原以为设为高或低都可以,不想TXD设为低后,不行,必须设为高,请教大家,这时为什么,谢谢。

神农鼎 发表于 2026-1-7 12:59:46

发送管脚设置成强推挽,接收设置成高阻输入

newlined 发表于 2026-1-7 13:35:22

神农鼎 发表于 2026-1-7 12:59
发送管脚设置成强推挽,接收设置成高阻输入

谢谢管理员的回复,我刚试了下,发送脚设为强推挽,接收设为高阻输入,P3=0x00;还是不行,P3=0x02;串口就可以正常工作。

DebugLab 发表于 2026-1-7 14:35:45

newlined 发表于 2026-1-7 13:35
谢谢管理员的回复,我刚试了下,发送脚设为强推挽,接收设为高阻输入,P3=0x00;还是不行,P3=0x02;串口 ...

串口默认是高电平,TXD需要置1

newlined 发表于 2026-1-7 15:03:08

DebugLab 发表于 2026-1-7 14:35
串口默认是高电平,TXD需要置1

好的,谢谢版主的回复。
页: [1]
查看完整版本: 请教大家:初始化时,串行口的发,比如串口1的TXD,必须置高吗?