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

学习冲哥STC单片机之USB-CDC虚拟串口与printf函数应用

[复制链接]
  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    5

    主题

    56

    回帖

    429

    积分

    中级会员

    积分
    429
    发表于 2024-2-21 22:28:22 | 显示全部楼层 |阅读模式
    昨天在学习了冲哥的《不停电下载之USB-HID与USB-CDC》,
    我们在将单片机写入USB-CDC的程序后,插上单片机开发板后就会在电脑端生成1个COM端口号,
    通过这个端口号可以与电脑收发数据,完成双方信息的交互。
    C语言printf函数的实现,需要在主程序添加以下程序段:
    if(DeviceState != DEVSTATE_CONFIGURED)
      continue;
    if(bUsbOutReady)    // 如果串口接收到数据,执行{ }内语句
    {
      usb_OUT_done(); // 接收应答(固定格式)
    }

    同时这里有1个坑是,我们从官网下载的usb库文件,需要把其中“#define PRINTF_HID            //printf输出直接重定向到USB HID接口”的注释取消。
    这样才能电脑输出我们要显示的数据内容。


    第5课是主讲C语言运算符和进制入门。

    C语言运算符主要分为3种类型:算术运算符、位运算符、赋值运算符。

    通过对printf函数的运算,我学会了%格式字符的基本应用,也能熟练运行转义字符,并用printf函数来做C语言运行符。
    同时这里我也发现有一个坑,即在main()主函数内不能去声明变量,程序会报错,要申请的变量必须放在main()外。
    这里希望论坛大大能够帮忙解读一下,C语言也有全局变量和局部变量之分,是不是这里也是一样的。


    这里还有1个疑问是USB-CDC虚拟串口,能不能与支持USB-TTL的设备进行通讯,串口收发数据,这个电平信号是不是5V输出的,需要将到3.3v来通讯。
    printf函数运用.jpg
    USB-CDC串口输出显示.jpg
    永远相信美好的事情即将发生!
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    5

    主题

    56

    回帖

    429

    积分

    中级会员

    积分
    429
     楼主| 发表于 2024-2-21 22:29:48 | 显示全部楼层
    因为STC-ISP的串口收发界面太小,所以我是用其他串口通讯助手来输出显示结果,一样好用,选择好正确的com端口就好。

    点评

    ISP界面的串口收发界面是可以自己拖动大小的哦!鼠标左键点住箭头的位置就可以拖动这个框调整大小了! [attachimg]35691[/attachimg] 其次点击工具,独立显示串口助手也会跳出来一个小巧精简的串口助手界面哦。 [a  详情 回复 发表于 2024-2-22 08:12
    永远相信美好的事情即将发生!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:01
  • 签到天数: 107 天

    [LV.6]常住居民II

    42

    主题

    1028

    回帖

    7098

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    7098
    QQ
    发表于 2024-2-22 08:12:43 | 显示全部楼层
    dumon 发表于 2024-2-21 22:29
    因为STC-ISP的串口收发界面太小,所以我是用其他串口通讯助手来输出显示结果,一样好用,选择好正确的com端 ...

    ISP界面的串口收发界面是可以自己拖动大小的哦!鼠标左键点住箭头的位置就可以拖动这个框调整大小了!
    截图202402220809573082.jpg


    其次点击工具,独立显示串口助手也会跳出来一个小巧精简的串口助手界面哦。
    截图202402220812061040.jpg

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    5

    主题

    56

    回帖

    429

    积分

    中级会员

    积分
    429
     楼主| 发表于 2024-2-22 08:39:08 | 显示全部楼层
    谢谢冲哥,刚去STCISP软件测试过了,是可以做为一个独立窗口使用的,这个软件太强大了,汇合了许多实用的工具软件。
    永远相信美好的事情即将发生!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    擦汗
    4 天前
  • 签到天数: 48 天

    [LV.5]常住居民I

    0

    主题

    24

    回帖

    282

    积分

    中级会员

    积分
    282
    发表于 2024-2-29 19:34:26 | 显示全部楼层
    #define PRINTF_HID  这和被注释我也摸索了好久,一直无法实现USB-CDC打印
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    11 小时前
  • 签到天数: 87 天

    [LV.6]常住居民II

    7

    主题

    846

    回帖

    1460

    积分

    金牌会员

    积分
    1460
    发表于 2024-3-12 11:58:10 来自手机 | 显示全部楼层
    print相对自己写函数是不是会占用多点空间
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    5

    主题

    56

    回帖

    429

    积分

    中级会员

    积分
    429
     楼主| 发表于 2024-3-12 13:47:02 | 显示全部楼层
    soma 发表于 2024-3-12 11:58
    print相对自己写函数是不是会占用多点空间

    为何会有如此一问呢,正常来说,单片机内部的空间都足够我们用了,这一点点应该不会占用太多的空间。我还没有涉及到写串口输出的程序这一块,都是按照教程来,只是简单打印一些变量来输出显示,用来监视变量在程序里的变化过程,还没有学习到用串口与别的设备进行通讯。
    永远相信美好的事情即将发生!
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-31 18:24 , Processed in 0.068808 second(s), 60 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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