请教Ai8051U实验箱串口2--PC通信,单片机无法接受PC机数据?
这几天在听陈桂友老师的课程,串口通信达实验,遇到个问题:实验环境如下:
1 Ai8051U实验箱+“一箭双雕”
主要是验证串口2和PC之间无校验通信:
关键程序如下:
void Timer0_Init(void) // 1毫秒@11.0592MHz
{
AUXR |= 0x80; // 定时器时钟1T模式
TMOD &= 0xF0; // 设置定时器模式
TL0 = 0xCD; // 设置定时初始值
TH0 = 0xD4; // 设置定时初始值
TF0 = 0; // 清除TF0标志
TR0 = 1; // 定时器0开始计时
ET0 = 1; // 使能定时器0中断
}
void Uart2Isr() interrupt 8
{
if (S2TI) // 发送中断标志置1时
{
S2TI = 0; // 清零发送中断标志
busy = 0; // 清零忙状态
}
if (S2RI) // 接收中断标志置1时
{
S2RI = 0; // 清零接收中断标志
// buffer = S2BUF; // 接收长度16
// wptr &= 0x0f; // 接收长度16
blinkflag = 1; // LED闪烁标志置1
buffer = S2BUF; // 接收长度1
if(buffer == '1') // 当接收到的字符是‘1’时
{
blinkflag = 1; // LED闪烁标志置1
}
}
}
void Uart2Init() // UART2初始化
{
S2CFG = 0x01; // 串口2此位必须为1,否则可能产生不可预期后果
//Ai8051U试验箱是P4.2 RXD2_2 P4.3 TXD2_2,利用J18A J18B
P_SW2 |= 1; //UART2 switch to: 0: P1.2 P1.3, 1: P4.2 P4.3
//屠龙刀久不需要这行
S2CON = 0x50; // 模式1(8位数据)、接收使能
T2L = BRT;
T2H = BRT >> 8; // 波特率对应的重装载值
T2x12 = 1; // 1T模式
T2R = 1; // 启动定时器2
wptr = 0x00; // 清零写指针
rptr = 0x00; // 清零读指针
busy = 0; // 清零忙标志
}
void UartSend(char dat) // 发送字符函数
{
while (busy); // 当串口忙时,等待
busy = 1; // 忙标志置1
S2BUF = dat; // 发送数据dat
}
void UartSendStr(char *p) // 发送字符串函数
{
while (*p) // 字符串结束标志‘\0’前循环
{
UartSend(*p++); // 逐个发送字符串的字符
}
}
void Blink() // P2口流水灯
{
u8 i;
for(i = 0;i < 6;i++) // 闪烁3次(即亮灭6个过程)
{
P0 = !P0; // 取反实现亮灭
delayms(200); // 延时200ms
}
}现在遇到的问题是,实验箱按P32,串口助手能通过CDC串口接受到字符串“HelloWorld!”
但是从PC机这端串口助手以字符串形式发送“1” ,实验箱没反应
我们直接在接受中断无条件执行blinkflag = 1; // LED闪烁标志置1
都没有反应,证明单片机根本没有进入接受中断服务函数
把“一箭双雕”换了STC link1D 也是同样现象,哪位大侠帮手看看?
硬件连接如下:
其实是我昨天晚上直接把陈老师的UART2 向PC发送字符串的实验改了一下
昨晚更离谱,连试验箱向PC串口助手发送字符串都不行,后来把STC的例子程序
下载后,证实是原程序从STC8H8K64U移植到Ai8051U试验箱,应该是软件哪里出问题
今天想进一步双向通信,怎么试验箱就没能收到串口助手的“1”呢?
实际是根本没有发生接受中断........... 我已经把“一箭双雕”和STC link1D 都升级到V6.96O
版本了.........
这种基础实验,以前都是很顺利的,没发现有问题啊
是哪里升级后不匹配么?......................
通道上首先是STC的CDC串口助手,我换了SSCOMv5132,还是一样
那么剩下的就是“一箭双雕”和STC link1D,难道2中固件都出问题?其实我手头STC link1D有2个
“一箭双雕”也是2个,都交叉换过,现象是一样的。
而这个串口2的软件,课堂演示和实验室使用也好几年了,只能重点怀疑“一箭双雕”和STC link1D,
包括2者的升级。
我手头前段时间在淘宝买了2块追风剑,拿来试一试?
结果发现另一个问题:追风剑PCB板没有丝印,勉强从芯片手册查到:
P1.0P1.1 是左边开始最上端数,的第12,13脚:
//STC32F12K54-64MHZ-LQFP48
S2_S = 0; //RXD2/P1.0, TXD2/P1.1
RXD是接P1.0TXD是接P1.1
其他脚就没法查,太细小啦,不过还是单向通信:
问题好像真的存在于一箭双雕和STC link1D
不行了,搞不掂,投降啦
PC端的串口助手,单片机,通信软件 和“一箭双雕”或者STC link1D
从历史来看,最短的就是“一箭双雕”或者STC link1D
从复杂程度来看,最麻烦的也是“一箭双雕”或者STC link1D
原来一个340芯片,独占一个USB只能产生一个串口,现在“一箭双雕”或者STC link1D在只有1个USB
的情况下,不但要产生2个CDC串口(速度是12M!),还要有烧录的一个串口,一定会很复杂,出错的机会就多。
这个很容易理解,毕竟平时都是用USB库函数,直接自己搞是不行的。
wuzhengmin 发表于 2026-1-23 16:42
问题好像真的存在于一箭双雕和STC link1D
不行了,搞不掂,投降啦
未能复现此问题
短接Link1D的RXD和TXD试一下自收发是否正常
可用最新版ISP软件更新Link1D固件
接USB,按下脱机下载键,按一下电源键断电然后松开电源键,ISP软件识别到USB Writer后松开脱机下载键,然后按图操作
DebugLab 发表于 2026-1-24 12:42
未能复现此问题
短接Link1D的RXD和TXD试一下自收发是否正常
可用最新版ISP软件更新Link1D固件
感谢感谢!我再慢慢查找原因!辛苦您啦!
页:
[1]