找回密码
 立即注册
查看: 146|回复: 1

STC8H8K64U在掉电模式下串口接收数据不正确

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-02-07 14:22:26
已绑定手机

2

主题

4

回帖

26

积分

新手上路

积分
26
发表于 2026-2-7 14:33:11 | 显示全部楼层 |阅读模式
在掉电模式下,测试把接收数据进行回传,少了一个字节,而且数据不对。系统设置频率为24Mhz


图1是波特率在100000下的测试,图二是9600波特率下的,在100000下波特率接收的数据完全不对,9600下还有时候数据是正确的,但是大部分都是异常数据,在4800波特率下会好一点,发几次可以收到一帧正常数据


void Uart1_Init(void)        //200000bps@24.000MHz
{
        
        fifo_register(&Tx_fifo, Tx_Buf, TX_FIFO_BUFF_SIZE, fifo_lock, fifo_unlock);
        fifo_register(&Rx_fifo, Rx_Buf, RX_FIFO_BUFF_SIZE, fifo_lock, fifo_unlock);
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        //200000
//        TL1 = 0xE2;                        //设置定时初始值
//        TH1 = 0xFF;                        //设置定时初始值
        
        //100000
        // TL1 = 0xC4;                        //设置定时初始值
        // TH1 = 0xFF;                        //设置定时初始值
        
        // 9600
        TL1 = 0x8F;                        //设置定时初始值
        TH1 = 0xFD;                        //设置定时初始值

        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
        ES = 1;                                //使能串口1中断
}


volatile uint8_t Sleep_Rx[5] = {0};
void Uart1_Isr(void) interrupt 4
{
        uint8_t data TxData;
        uint8_t data RxData;
        static uint8_t Rx_count = 0;

        if (TI)                                //检测串口1发送中断
        {
                TI = 0;                        //清除串口1发送中断请求位
                if (fifo_read(&Tx_fifo, &TxData, 1))
                {
                        SBUF = TxData;
                }else{
                        // Busy = 0;
                        uart1_actrive = 0;
                }
        }
        if (RI)                                //检测串口1接收中断
        {
                RI = 0;                        //清除串口1接收中断请求位
                RxData = SBUF;
                if (g_sys.state == SYS_OFF){
                        Sleep_Rx[Rx_count++]= RxData;
                        if(Rx_count > 4)
                        {
                                g_run.Rx_Wake_Up_Flag = 1;
                                Rx_count = 0;
                        }
                        Uart1_SendByte(RxData);
                }else{
                        fifo_write(&Rx_fifo, &RxData, 1);
                }
        }
}


if ((g_sys.state == SYS_OFF) && status == 1)        
    {

        if (g_run.Rx_Wake_Up_Flag)
        {
            if(Sleep_Rx[0] == 0XAB && Sleep_Rx[4] == 0xCD)
            {
                Analysis(Sleep_Rx[1], (uint16_t)Sleep_Rx[2] << 8 | Sleep_Rx[3]);
               
            }else
            {
                Delay_ms(5);
            }
            g_run.Rx_Wake_Up_Flag = 0;
        }else if ((!fifo_get_occupy_size(&Tx_fifo)) && (!g_run.Rx_Wake_Up_Flag) && (!uart1_actrive))
        {
            Delay_ms(1);
            MCU_Sleep();
        }else if (g_sys.state == SYS_ON && status == 1)
    {
        status = 0;
        Power_On();
    }







截图202602071428112309.jpg
截图202602071428576962.jpg

在4800波特率下

在4800波特率下
截图202602071440027715.jpg
截图202602071440226520.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2026-04-30 08:53:57
已绑定手机

106

主题

4345

回帖

9748

积分

荣誉版主

无情的代码机器

积分
9748
发表于 2026-2-7 16:40:10 | 显示全部楼层
没看到在哪进出掉电模式

现成的例程可参考:

https://www.stcaimcu.com/forum.p ... 1499&pid=116488
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-1 10:19 , Processed in 0.113427 second(s), 55 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表