|
这个案子是我基于自己设计的QST系统完成的案子,总是想着怎么和Andriod手机相连。尝试用usb虚拟串口连接,终于通了。: S U C* L; ?% E7 b 硬件:手头一个现成的带各种传感器的板子(bmp280,bma250,hmc5883,gps)+STM32F103 软件:基于自己设计的qst软件系统+USB虚拟串口驱动。' k9 k. _4 ?" e( p( B *居然可以热插拔usb,连上手机的otg线。这里要感谢usbhost的开发者,网上几乎找不到andriod手机连接虚拟串口的程序。6 z$ c) H5 P6 f7 y *虚拟串口连接winxp,win10也是可以的。' \. k9 F) L6 `+ W3 l/ s" D; n *软件还没法开放出来,代码需要整理一下。 2 k1 e3 `1 E- t* O5 |% ~ 项目完成后,大致的效果是,串口不断输出板子上各种传感器的参数,每个传感器的采集数据都带10秒以内的精确到毫秒的时间戳,输出: 气压 (采集速度 5次/秒)3 F" g/ {5 U, p, H, u) B 温度 (采集速度 5次/秒) 海拔 (采集速度 5次/秒) 陀螺仪x,y,z (采集速度 ?次/秒): [0 e: w- U* u0 R. M6 S% A 姿态(倾斜度,俯仰角)(采集速度 5次/秒) 指南角 (采集速度 10次/秒)& W P/ U" T0 W+ t M6 `. _: P gps经纬度 (采集速度 1次/秒) gps工作状态 (采集速度 1次/秒)8 X+ K) f2 ?6 L7 [' [' d / T2 E9 t. `: W, d7 v, R$ b ; V5 j" w. F9 N! F/ Q/ G) M+ Z 我在想如果usb虚拟串口要跑到什么速度才能满足这种密集的数据输出。 最后写一个pc软件 0 L% Z5 q9 q+ Q2 o4 l! [ 5 ?" m; A# u* i7 @. B: _
! t& r3 f6 c$ H9 j/ p" f 2 C! U5 }* Z$ e7 p7 V 5 V8 v0 g# n5 V0 A Andriod手机抓到的usb数据。
5 O7 o) f5 G/ b4 E! _ 1 y+ }' L% u# {* s# ~4 I 演示视频4 L; W! G# }0 G) l! H% L , [3 `3 E+ ^! q 1 X# h+ ~$ }6 K9 k |
最全USB HID开发资料,悉心整理一个月,亲自测试
【源码】STLINK-V3MINI 高速USB仿真器,成功改刷【高速CMSIS-DAP】
STM32 USB CDC 虚拟多串口
实战经验 | 选择USBX模块生成USB CDC ACM无PD的项目
STM32 USB HID键盘例程
刘氓兔的杂谈【001】-片上USB 高速PHY
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
在线直播|无需编写任何代码即可在STM32上实现USB-C Power Delivery
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
USB Audio设计与实现
微信公众号
手机版
Andriod源代码包,在bin目录下可以找到编译好的安装apk。
验证是ok的,手机需要取得root权限。我用的手机是红米note2
/ b+ n8 |6 B; _1 P6 s$ u$ E* d
顺便show一下我写的qst系统,用户层代码,是不是和Arduino有点像呢?# f+ J/ m1 {, Z- }, a& \/ ?3 B( w7 i
7 M) g) z/ I) r% ^" i7 w
l5 z, L" ^: }8 N, d- \0 d7 }$ W% `
#include "qst_system.h"+ [1 I4 C6 ?/ l9 g* S5 H# i6 {
const char S_JSON_BARO_HEAD[]={"\"Baro\":["};7 ^9 V; k5 T1 X2 M& W" V
uint32_t t,json_pkg_t;5 p+ D7 [4 n% C9 {
1 [5 y( K+ h# Y8 T; M2 K
void setup(void)
{
ioMode(PB0,OUTPUT);) I6 m( D- i6 v$ F
usbMode(0,0);) f* {- K% A n# d
t = 0;- h, H- k; Y* F7 i$ A$ Q8 h2 ^$ E
json_pkg_t=0;( q0 W5 ?+ P M5 j( N% I9 L) i
}
void loop(void)8 ^+ {# u, p( j" S- U! j
{! m' B2 S" `+ o+ x% m5 ]
WEATHER_INFO_TYPE *w = (WEATHER_INFO_TYPE*)qstMessage(&BaroTskInfo);
if( compSystick(t) ){4 M6 ~" P ~% t) }. [7 p
if( ioRead(PB0)==LOW ){! }0 x; \4 { n8 { x9 r
ioWrite(PB0,HIGH);
t = msSystick()+10;6 |3 `7 h: W( _# O0 Z# H/ {8 N
}else{; X: m2 f& k/ Q) M# e
ioWrite(PB0,LOW);: o& \( G" c+ f2 c! e* ~3 T& `
t = msSystick()+990;3 S. Z9 X8 I7 D. Q1 I: W \: f
}
}0 w' Q' S1 ~: Z
4 g/ d+ s1 K. m) O6 S# ]/ x
//) \# i& r/ z' h8 V4 U
if( compSystick(json_pkg_t) ){4 L( h) m, s2 t) i
json_pkg_t = msSystick()+1000;$ k+ i1 n( z, ~
printf("]\r\n%s\r\n",S_JSON_BARO_HEAD);6 \9 W5 d% ?# U% h' y
}
if( w->update ){
printf("{\"t:\"%d,\"temp\":%d,\"press\":%d.%02d,\"alt\":%d}\r\n",w->t%10000,w->temp/100,w->press/100,w->press%100,w->altitude);
w->update = 0; 4 m% I, ` D. ^# ]9 h
}
}* N2 L- |+ o. B
" e, T1 P a0 E. U. H5 r- f
! ^3 W- G3 N' G' U4 D
[飞鸽的qst系统的介绍]
QST是“飞鸽”基于STM32 ARM架构的一个前后台开源系统。; n1 a* h" W! k8 }- X$ o. v
QST的优势
1.基于32位的cortex-m3的ARM
2.采用嵌入式系统常用的KEIL ARM编译和调试环境,调试工具采用应用广泛的ULINK/JLINK JTAG仿真器。
3.分层系统架构(灵活、强大、简单):ST官方库 模块层 QST系统层用户应用层* b4 G$ d' g# Y, n; n5 q
4.充分利用ARM本身的中断来进行实时任务处理,设计良好的程序主循环运行频率同样可以达到非常高的调用频率。
6 v# O) B- b) ?0 o
: T2 M$ u6 E* n6 N
6 h3 Z0 `2 j! I# m' V3 d
谢谢分享啊 學習中