找回密码
 立即注册
查看: 915|回复: 2

USB CDC 自动下载另一种实现方式:波特率1200+DTR 启动boot

[复制链接]

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-7-30 20:42:19 | 显示全部楼层 |阅读模式
函数 void usb_set_ctrl_line_state() 实现打开串口的时候,波特率选1200,并且DTR控制输出低电平,就会进入ISP模式。
函数 void USBSerial_ep_out() 实现自定义命令进入ISP模式,默认注释了。
推荐使用 波特率1200+DTR 方式启动boot。这样不需要每一次USB输出都要判断,节省了cpu大量的时间。

1,支持格式化输出 USBSerial_printf,方便直接用USB调试。

2,支持USB(CDC)模式不掉电下载。ISP软件已经支持。
方法:
    A,ISP软件,串口边上有一个设置按键,选择 下次使用STC-HID接口进行ISP下载。如果用其他串口工具下载不能选。
    B,收到用户命令后复位到ISP监控程序区  选 USB-CDC/串口模式  :波特率选1200,并且DTR 使能。

3,如果用户代码有bug,卡死cup或者跑飞,只能按住P3.2管脚,手动启动isp模式。
4,因为是判断controlLineState打开串口的,如果要使用USBSerial()这个函数,等待上位机串口打开。打开串口的时候需要选的DTR enable。


  1. uint8_t USBSerial();//判断串口是否打开
  2. void USBSerial_flush(void);//清空buf
  3. uint8_t USBSerial_available();//串口数量
  4. char USBSerial_read();//读一个字节
  5. uint8_t USBSerial_read_bytes(uint8_t *p, uint8_t len);//读多个字节
  6. size_t USBSerial_write_bytes(uint8_t *p, size_t len);//写多个字节
  7. uint8_t USBSerial_write(char c);//写一个字节
  8. int USBSerial_printf(const char *format, ...);//格式化打印
复制代码



USBSerial-STC8-可用于串口调试不断电下载-熊仔20221101.zip

11.68 MB, 下载次数: 126

USB CDC

回复

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-7-30 20:52:27 | 显示全部楼层


新版本ISP 串口边上的设置界面改了。位置改到了用户自定义界面,勾选 下次使用STC-HID接口进行下载。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:322
  • 最近打卡:2025-04-28 22:28:11

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-11-17 10:43:57 | 显示全部楼层
可以让你这个和stc的库函数公用么?
之前批量接收的懒得折腾了,每次64字节,读256就多读取几次凑合用了
想 既用lib库函数,又能只读取一个字节 USBSerial_read
貌似不能放一起使用,你的例子和库函数只能二选一
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:17 , Processed in 0.241883 second(s), 63 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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