文号
824492
阅读
33557
回复
12
收藏
11
该来的还是回来-STM8的软件USB
2016/08/15
IP:澳大利亚
AVR的好处都有啥?
这玩意价格差不多,但是VUSB(软件USB)大大扩展了AVR的应用空间。

STM8是一种性价比很高的单片机,上面外设功能很强大,价格也便宜,封装也够小,也够稳定,就是不带硬件USB,而且也没有现成的软件USB哎。

窝想着STM8和AVR是差不多的货色,速度也差不多,理论上AVR能做的STM8也能做!

于是Google了一下,发现了一个老毛子的代码,窝兴冲冲的下载到单片机里,发现电脑根本不是别这个USB设备!!

原理不难,用stm8的定时器和IO接收发送USB包,如果stm8用12M晶振,usb1.1的低速设备速率是1.5Mbit/s,通过适当的延时也能做到。由于对时间的高度敏感,所以毛子把收发部分的核心代码用汇编写了。

窝开始了漫长的修改之路...当然中间也参考了别人的代码和大量文档..
现在做到了用STM8S103F3P6模拟一个自定义的USB-HID设备,HID就是人机接口设备,鼠标键盘都是这种。HID设备可以和主机之间收发信息。

目前的进度是,模拟的HID设备可以被枚举,可以和主机交换信息。
目前没做的:没加入字符串描述符的支持,没封装好,部分电脑不兼容
USB总线有时间的时候,单片机占用率相当高,这个没办法,因为USB就算是低速设备的通讯速率对8位机也是个挑战...

测试兼容列表:
HM67主板的USB2.0
UPC的某种USB3.0芯片
2014款Mac Pro
Surface Pro 3(不兼容,无法枚举,原因不明)

开发环境STVD+Cosmic
单片机STM8S103F3P6

源码:
Github链接
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

代码以后还会继续改善,增加更多功能,更好的封装
STM8掺了USB,应该能做更多有意思的东西
欢迎USB大神们一起来研究~
12
10年4个月前IP:湖北
824496
1楼
脆脆厉害!
stm8的usb功能我之前一直不敢想,如果能稳定传输数据。可以在设计上省去串转usb芯片。
体积至少小两倍,要知道电子产品同样功能体积小一点能带来的改变可不止一点。

强烈建议脆脆出usb评估板!( ´ ▽ ` )ノ
引用
评论
10年4个月前IP:陕西
824507
2楼
毕竟IO模拟USB1.1还是很消耗系统资源的,8位单片基本跑了USB协议栈就干不了别的了,还是用带控制器和物理层的单片实在,LPC的M0系列有很便宜且带USB的单片~
引用
评论
10年4个月前IP:江西
824508
3楼
用USB为啥不用STM32......
引用
评论
10年4个月前IP:广东
824511
4楼
楼上两位同志!难度!难度啊!用STM8撸出USB,基本说明:

1. 楼主已经把STM8 CPU编程手册翻烂了
2. 楼主已经把USB Spec翻烂了

从折腾难度上来讲,已经吊打阿莫的各种S103 bootloader了。
引用
评论
10年4个月前IP:广东
824550
5楼
一直没机会折腾……备件、拆机IC、废板上各种M3、M4、Power、FPGA、CPLD……上周还扔了一堆
引用
评论
10年4个月前IP:广东
824602
6楼
建议还是用sdcc编译吧。cosmic编译器简直烂……
引用
评论
10年4个月前IP:四川
824705
7楼
不知道STC的玩意能不能实现软件usb,同为8位机。(好像STC是假1T)
引用
评论
10年4个月前IP:澳大利亚
824771
8楼
这个主要看单个指令周期快不快和指令周期一不一定
usb对时间要求很高的哦
stc得分析下指令集咯
引用
评论
10年3个月前IP:广东
824890
9楼
我之前移植的,还不完善,后面没时间弄了 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
引用
评论
10年3个月前修改于 10年3个月前IP:澳大利亚
825048
10楼
引用 wlianmin:
我之前移植的,还不完善,后面没时间弄了 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
最近在做新的stm8软usb
从根本把整个PC占用的问题解决了
重新写了rx和tx的程序 不过大部分是汇编的
最近先debug下再发上来
原版的接收程序似乎不能处理Bit-Stuffing这种情况 会比较蛋疼

快来一起坑/w\
顺便问一下 15MHz的晶振呢
引用
评论
10年3个月前IP:黑龙江
825267
11楼
理论上超过12Mhz主频的mcu都可以达到 但是为了效率足够必须汇编
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的