找回密码
 立即注册
查看: 3045|回复: 25

只引出P3.0,P3.1,想要把printf()打印的信息通过USB传到电脑?

[复制链接]

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-28 16:31:41 | 显示全部楼层 |阅读模式
本帖最后由 zhangzhonghua 于 2023-12-28 16:35 编辑

只引出P3.0,P3.1,想要把printf()打印的信息通过USB传到电脑?遇到问题了,请教。
芯片STC8H8K64U,只引出P3.0,P3.1接到USB-TypeC座子上,还有P3.2也接到了按键上。使用STC-USB Link1D工具。
软件目前所做的是,按某个按键后,屏幕会有显示,另外把这个键的名字printf()出来,正常的话,电脑串口工具会打印键名出来。

问题:使用STC-USB Link1D工具,只是挂着,没打开CDC1串口,按了几次按键,屏幕就不动了,表明程序异常了。
打开CDC1串口,继续按键,屏幕仍不动,电脑串口也没打印。

逐个排除法,去掉STC-USB Link1D工具,USB-TypeC直接连接到电脑。只是挂着,没打开CDC串口,按了几次按键,屏幕就不动了,表明程序异常了。
但此时打开CDC串口,还没去按键,屏幕就动起来了(难道刚才电脑这边USB不接收,单片机就阻塞了?),继续按键,屏幕正常,电脑串口打印键名正常。

程序里面USB相关的代码,参考 01-跑马灯,15-通过USB CDC协议虚拟串口收发数据 里面的例程。如下,
#define PRINTF_HID              //printf输出直接重定向到USB HID接口,放在"usb.h"头文件之前
...
//USB调试及复位所需定义
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                      //设置自动复位到ISP区的用户接口命令

//P3.2口按键复位所需变量
bit Key_Flag;
u16 Key_cnt;
...
    //USB调试及复位所需代码-----
    P3M0 &= ~0x03;
    P3M1 |= 0x03;
    IRC48MCR = 0x80;
    while (!(IRC48MCR & 0x01));
    USBCLK = 0x00;
    USBCON = 0x90;
    usb_init();
    //-------------------------
...
    IE2 |= 0x80;   //IE2相关的中断位操作使能后,需要重新设置EUSB
    EA = 1;     //打开总中断
...
void KeyResetScan(void)
{
...
}
void timer0_int(void) interrupt 1  //1ms 中断函数
{
    if (bUsbOutReady) //USB调试及复位所需代码
    {
        //USB_SendData(UsbOutBuffer,OutNumber);  //发送数据缓冲区,长度(接收数据原样返回, 用于测试HID)
        
        usb_OUT_done();
    }
    KeyResetScan();   //P3.2口按键触发软件复位,进入USB下载模式,不需要此功能可删除本行代码
...
}
USB库使用的是 stc_usb_cdc_8h_xdata.LIB,43,925 字节,修改时间 2022‎年‎11‎月‎11‎日,‏‎13:48:20

回复

使用道具 举报 送花

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-28 16:40:33 | 显示全部楼层
本帖最后由 zhangzhonghua 于 2023-12-28 16:48 编辑

以上USB代码和printf()打印语句注释掉的话,按键怎么按,屏幕都是正常的。
以前使用UART串口,好像没有这么多问题。这次想着换上USB试试,没想到遇到这么多问题。

问题是USB还只有库没有源码,怎么一步步来定位问题啊?
回复 支持 反对

使用道具 举报 送花

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-28 16:51:40 | 显示全部楼层
另外一个信息,按键检测、键名printf()是在main()函数下层里面做的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2023-12-28 17:05:39 | 显示全部楼层
截图202312281705124083.jpg

截图202312281705366867.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2023-12-28 17:06:16 | 显示全部楼层
截图202312281706139225.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2023-12-28 17:07:48 | 显示全部楼层
我请内部来回答下
回复 支持 反对

使用道具 举报 送花

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-28 17:10:02 | 显示全部楼层

我就是看到这个宣传,说从UART转USB试试,但现在遇到问题,怎么逐步来定位解决啊?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:444
  • 最近打卡:2025-06-16 09:26:42
已绑定手机

39

主题

2059

回帖

7072

积分

论坛元老

积分
7072
发表于 2023-12-28 17:59:34 | 显示全部楼层
本帖最后由 乘风飞扬 于 2023-12-28 18:01 编辑
zhangzh*** 发表于 2023-12-28 17:10
我就是看到这个宣传,说从UART转USB试试,但现在遇到问题,怎么逐步来定位解决啊? ...
使用附件例程试试,按一次按键打印一次信息,例程使用P3.2,P3.3口按键
截图202312281800213944.jpg

USB-CDC-printf-STC8H.zip

33.45 KB, 下载次数: 199

回复 支持 反对

使用道具 举报 送花

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-28 19:19:52 | 显示全部楼层
本帖最后由 zhangzhonghua 于 2023-12-28 19:21 编辑

1、解压文件,一眼注意到USB库的日期比我手头的新。
2、下载例程到板上运行,打开串口,按按键,有打印。
3、把该新USB库替换到我的project里,重新编译,下载运行,测试,目前再无屏幕不动的现象、也没有感觉阻塞的现象。
结论:
旧的库文件有问题:stc_usb_cdc_8h_xdata.LIB,43,925 字节,修改时间 2022‎年‎11‎月‎11‎日,‏‎13:48:20
新的库文件正常:stc_usb_cdc_8h_xdata.LIB,44,129 字节,修改时间 2023‎年‎6‎月‎30‎日,‏‎18:17:21

还剩个问题请教:使用STC-USB Link1D工具,打开CDC1串口,按按键,电脑串口是没打印的;但是,去掉STC-USB Link1D工具,USB-TypeC直接连接到电脑,打开串口,按按键,电脑串口是有打印的。这个是什么原因?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:444
  • 最近打卡:2025-06-16 09:26:42
已绑定手机

39

主题

2059

回帖

7072

积分

论坛元老

积分
7072
发表于 2023-12-29 10:06:30 | 显示全部楼层
zhangzh*** 发表于 2023-12-28 19:19
1、解压文件,一眼注意到USB库的日期比我手头的新。
2、下载例程到板上运行,打开串口,按按键,有打印。
3 ...

使用STC-USB Link1D工具的CDC1串口与芯片通信的话,芯片需要配置成UART串口与工具通信;
而例程是将芯片本身配置为USB CDC串口,所以只要使用USB线连接电脑即可,不需要其它串口工具。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 10:57 , Processed in 0.155621 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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