- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2026-02-07 14:22:26
已绑定手机
新手上路
- 积分
- 26
|
在掉电模式下,测试把接收数据进行回传,少了一个字节,而且数据不对。系统设置频率为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();
}
|
|