- 打卡等级:初来乍到
- 打卡总天数:4
- 最近打卡:2025-10-08 18:07:13
已绑定手机
注册会员
- 积分
- 55
|
发表于 2025-10-7 22:23:54
|
显示全部楼层
#include "stc.h"
#include "uart.h"
BOOL bUartRxReady;
BYTE UartrecvIndex;
BYTE UartRecvStep;
BYTE UartRecvSum;
BYTE edata UartTxBuffer[256];
BYTE edata UartRxBuffer[256];
void uart_init()
{
// UART3引脚配置 - P5.0(RXD3), P5.1(TXD3)
// 设置P5.0为高阻输入(RXD3) - 只保留一次配置
P5M0 &= ~(1 << 0); // P5M0.0 = 0
P5M1 |= (1 << 0); // P5M1.0 = 1 → 高阻输入
// 添加P5.1为推挽输出(TXD3) - 之前缺失的配置
P5M0 |= (1 << 1); // P5M0.1 = 1
P5M1 &= ~(1 << 1); // P5M1.1 = 0 → 推挽输出
// UART3初始化
S3CON = 0x10; // 8位数据,可变波特率
S3CON &= 0xBF; // 串口3选择定时器2为波特率发生器
AUXR |= 0x04; // 定时器时钟1T模式
// 统一使用BAUD宏,移除固定的0xCC,0xFF
T2L = BAUD; // 设置定时初始值低位
T2H = BAUD >> 8; // 设置定时初始值高位
AUXR |= 0x10; // 定时器2开始计时
// 使能UART3接收(轮询方式,不使能中断)
S3CON |= 0x01; // 使能接收 (REN3=1)
uart_recv_done();
}
// 建议将函数名改为uart_poll以明确是轮询方式
void uart_isr() // 考虑改为 uart_poll()
{
BYTE dat;
// 检查UART3接收中断标志(轮询方式)
if (S3CON & 0x01) // 检查RI3标志
{
S3CON &= ~0x01; // 清除RI3标志
dat = S3BUF; // 读取接收数据
UartRecvSum += dat;
switch (UartRecvStep)
{
case 0:
L_CheckHead:
UartRecvStep = ((UartRecvSum = dat) == '#');
break;
case 1:
UartRxBuffer[0] = dat;
UartrecvIndex = 0;
UartRecvStep++;
break;
case 2:
UartRxBuffer[1 + UartrecvIndex++] = dat;
if (UartrecvIndex >= UartRxBuffer[0])
UartRecvStep++;
break;
case 3:
if (dat != '$') goto L_CheckHead;
UartRecvStep++;
break;
case 4:
if (UartRecvSum != 0) goto L_CheckHead;
bUartRxReady = 1;
UartRecvStep++;
break;
default:
break;
}
}
}
static BYTE send(BYTE dat)
{
// 等待UART3发送缓冲区空
while (!(S3CON & 0x02)); // 等待TI3标志
S3CON &= ~0x02; // 清除TI3标志
S3BUF = dat; // 发送数据
return dat;
}
void uart_send(BYTE status, BYTE size)
{
BYTE sum;
BYTE i;
sum = send('@');
sum += send(status);
sum += send(size);
if (size)
{
for (i = 0; i < size; i++)
{
sum += send(UartTxBuffer);
}
}
sum += send('$');
send(-sum);
// 等待发送完成
while (!(S3CON & 0x02));
}
void uart_recv_done()
{
bUartRxReady = 0;
UartrecvIndex = 0;
UartRecvStep = 0;
UartRecvSum = 0;
}
我把STC32的ISP代码改成串口3下载,然后通过蓝牙下载,发现下载不了,并且波特率设置没问题,连接无问题,可以给我看看问题在哪吗 |
|