NiCeLee 发表于 2026-2-20 19:25:49

求助:用的stc32g12k128芯片红外接收irda9600波特率收不到消息

用的芯片是stc32g12k128,还有8k48,用的都是站内的irda代码,红外接收模块是TFBS4652-TT1

配置成115200波特率的时候都正常,收发正常
但是配置成9600的时候只有单片机发出的我正常能收到,单片机收不到我发出的消息,就是中断都没有触发,
至于模块红外模块我用stm32的芯片测试9600波特率是好的,就是stc一直不行
代码部分只是修改了串口部分和irda部分,波特率是#define MAIN_Fosc   11059200L
void UartInit(void)
{
    P_SW1 = (P_SW1 & 0x3F) | (2 << 6);    //0:P30_P31, 1:P36_P37, 2:P16_P17, 3:P43_P44

    SCON = 0x50;    //8位数据,可变波特率
    AUXR |= 0x40;   //定时器时钟1T模式
    AUXR &= 0xFE;   //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;   //设置定时器模式
    TL1 = TM;       //设置定时初始值
    TH1 = TM>>8;    //设置定时初始值
    ET1 = 0;      //禁止定时器中断
    TR1 = 1;      //定时器1开始计时
    ES= 1;      //允许中断
}

void IrDAInit(void)
{
    SMOD = 1;         //串口1波特率加倍(必需)
    USARTCR2 = 0x80;    //enable irDA 普通模式
    USARTCR3 = 6;       //SYSclk/(16*6)=115200, 低电模式波特率
    USARTBRL = 0x06;    //SYSclk/(16*115200): 设置波特率115200
    USARTBRH = 0x00;
}


9600波特率用isp生成的
void Uart1_Init(void)      //9600bps@11.0592MHz
{
      SCON = 0x50;                //8位数据,可变波特率
      AUXR |= 0x40;                //定时器时钟1T模式
      AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
      TMOD &= 0x0F;                //设置定时器模式
      TL1 = 0xE0;                        //设置定时初始值
      TH1 = 0xFE;                        //设置定时初始值
      ET1 = 0;                        //禁止定时器中断
      TR1 = 1;                        //定时器1开始计时
      ES = 1;                                //使能串口1中断

}

void IrDAInit(void)
{
    SMOD = 1;         //串口1波特率加倍(必需)
    USARTCR2 = 0x80;    //enable irDA 普通模式
    USARTCR3 = 72;       //SYSclk/(16*6)=115200, 低电模式波特率
    USARTBRL = 0x48;    //SYSclk/(16*115200): 设置波特率115200
    USARTBRH = 0x00;
}


页: [1]
查看完整版本: 求助:用的stc32g12k128芯片红外接收irda9600波特率收不到消息