找回密码
 立即注册
查看: 90|回复: 6

用AiCube 生成串口2代码,遇到困难,请大侠指教:

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2026-04-06 11:30:05
已绑定手机

22

主题

2445

回帖

3458

积分

论坛元老

积分
3458
发表于 2026-3-6 17:41:45 | 显示全部楼层 |阅读模式
用AICube 生成了框架,正常应该是我在串口助手发送什么字符串(回车换行)


单片机AI8051U就会送什么

在串口1就一切正常,同样的设置,串口2就不能正常工作

在串口助手发送汉字字符串出现如下画面:

AI8051U芯片进入了(HID1) USB-Writer 状态,不知道问题出在哪里?

设置的画面是这样的



截图202603061738099768.jpg
截图202603061740287861.jpg

UART2.zip

395.04 KB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2026-04-06 11:30:05
已绑定手机

22

主题

2445

回帖

3458

积分

论坛元老

积分
3458
发表于 2026-3-6 17:46:40 | 显示全部楼层
u16 UART1 RX STA; 这个状态变量这样用
变量最高位表示数据接收有没有完成?
先定义个协议:数据有0D0A(就是\r\n),表示数据接收结束,就把UART1 RX STA最高位第15位设置为1,否则就是0 :


  1. ////////////////////////////////////////
  2. // 串口2中断服务程序
  3. // 入口参数: 无
  4. // 函数返回: 无
  5. ////////////////////////////////////////
  6. void UART2_ISR(void) interrupt UART2_VECTOR
  7. {
  8.     //<<AICUBE_USER_UART2_ISR_CODE1_BEGIN>>
  9.     // 在此添加中断函数用户代码
  10.                 u8 r= 0;
  11.     if (UART2_CheckTxFlag())            //判断串口发送中断
  12.     {
  13.         UART2_ClearTxFlag();            //清除串口发送中断标志
  14.         fPrintfBusy = 0;                //清除printf发送忙标志
  15.     }
  16.     if (UART2_CheckRxFlag())            //判断串口接收中断
  17.     {
  18.         UART2_ClearRxFlag();            //清除串口接收中断标志
  19.                 r= UART2_ReadData();
  20.                 if(!(UART2_RX_STA&0x8000))  //判断16位数据UART1_RX_STA最高位是否=1
  21.                 {
  22.                         if(UART2_RX_STA & 0x4000 ) //判断16位数据UART1_RX_STA次高位是否=1
  23.                         //是1的话说明上次接收到的是“0D”
  24.                         {
  25.                                 if(r!=0x0a)  UART2_RX_STA=0;  //假如现在接收到的不是“0x0a”,说明接收错了,从头再来
  26.                                 else UART2_RX_STA|=0x8000;  //或的目的是最高位置1的同时保留其他位不变
  27.                         }
  28.                         else  //正常接收数据
  29.                         {
  30.                                 if(r==0x0d) UART2_RX_STA|=0x4000;  //如果收到的是0x0d,次高置1
  31.                                 else
  32.                                 {
  33.                                         UART2_RX_BUF[UART2_RX_STA&0x3FFF]= r; //接收数据缓冲区,后14位保存数据
  34.                                         UART2_RX_STA++;
  35.                                         if(UART2_RX_STA>UART2_REC_LEN-1) UART2_RX_STA=0;
  36.                                        
  37.                                 }
  38.                                
  39.                         }
  40.                 }
  41.     }
  42.     //<<AICUBE_USER_UART2_ISR_CODE1_END>>
  43. }
复制代码


上面这段程序在串口1正常运行(当然是把相应的系统函数变成串口1的,标志也是)
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2026-04-06 11:30:05
已绑定手机

22

主题

2445

回帖

3458

积分

论坛元老

积分
3458
发表于 2026-3-6 17:51:13 | 显示全部楼层
问题主要是从PC机串口助手发送的字符串不能正常被Ai8051U 接收

如果单纯从Ai8051U向PC串口助手打印字符串是可以的,但是一从PC机串口助手发送字符串给

Ai8051U单片机,就好像死机了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:211
  • 最近打卡:2026-04-07 00:05:03
已绑定手机

17

主题

297

回帖

1528

积分

金牌会员

DIY玩家

积分
1528
发表于 2026-3-6 17:58:54 | 显示全部楼层
AiCube-ISP
今天有更新版本
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2026-04-06 11:30:05
已绑定手机

22

主题

2445

回帖

3458

积分

论坛元老

积分
3458
发表于 2026-3-6 18:09:39 | 显示全部楼层
哦哦
我尝试了新版本,故障现象没有改变,

我把超时中断是程序段移植过来,也是一样:

首先是编译没报错,下载后串口状态不对:

看图:

这个 (HID1) USB-Writer 不是我按P32+power键出现的,是我下载完自动出现的,在这个状态,肯定是不能正常工作的

怎么才能解决呢?  我打算把AiCube 用好,就可以阶段性放松,不用查寄存器.........


看来还不太可靠,更可能是我哪里搞错啦?还有一种可能,就是STC的本意是PC机和单片机之间的串口通信,是直接用USB_CDC串口,不用在外接USB转TTL再接串口?


因为我今天发现,无论是串口2或者串口3,使能USB-CDC串口后,使用USB-CDC串口和单片机通信的话,是非常顺畅的.............
截图202603070854297641.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:113
  • 最近打卡:2026-04-01 09:30:43

39

主题

487

回帖

3147

积分

超级版主

积分
3147
发表于 2026-3-9 17:12:39 | 显示全部楼层
这个 (HID1) USB-Writer 不是我按P32+power键出现的,是我下载完自动出现的,在这个状态,肯定是不能正常工作的====P3.2不要接地,退出USB下载模式

STC的本意是PC机和单片机之间的串口通信,是直接用USB_CDC串口,不用在外接USB转TTL再接串口===对的。
电话:0513-55012946 QQ:2195591714  微信:  19952583740
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2026-04-06 11:30:05
已绑定手机

22

主题

2445

回帖

3458

积分

论坛元老

积分
3458
发表于 2026-3-15 09:37:53 | 显示全部楼层
32G12*** 发表于 2026-3-9 17:12
这个 (HID1) USB-Writer 不是我按P32+power键出现的,是我下载完自动出现的,在这个状态,肯定是不能正常工 ...

万分感激您,确实是,本身单片机串口就2根线,资源有限,所以我才猜想STC公司应该是倡导MCU和PC助手通信的时候,直接用USB-CDC,明显快很多......................
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-4-7 00:22 , Processed in 0.110246 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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