
这个案子是我基于自己设计的QST系统完成的案子,总是想着怎么和Andriod手机相连。尝试用usb虚拟串口连接,终于通了。4 B' I1 g( R# Q( t8 Q/ U6 k3 m 硬件:手头一个现成的带各种传感器的板子(bmp280,bma250,hmc5883,gps)+STM32F103 软件:基于自己设计的qst软件系统+USB虚拟串口驱动。+ u$ t' H4 }2 x8 P! @: \5 O ) N* w: Z, N; g( m *居然可以热插拔usb,连上手机的otg线。这里要感谢usbhost的开发者,网上几乎找不到andriod手机连接虚拟串口的程序。0 c, P$ @6 I" g1 A *虚拟串口连接winxp,win10也是可以的。7 z3 Z# |1 m" }! w- z1 K *软件还没法开放出来,代码需要整理一下。 . I+ Z& V3 y6 o 项目完成后,大致的效果是,串口不断输出板子上各种传感器的参数,每个传感器的采集数据都带10秒以内的精确到毫秒的时间戳,输出:' Z" h+ M$ V Z 气压 (采集速度 5次/秒)" e, }9 H* y5 f# G( Q 温度 (采集速度 5次/秒) 海拔 (采集速度 5次/秒)( B" \% q9 \- ~$ W9 i" w 陀螺仪x,y,z (采集速度 ?次/秒)- ^% A6 q% }! L4 [ 姿态(倾斜度,俯仰角)(采集速度 5次/秒) 指南角 (采集速度 10次/秒) gps经纬度 (采集速度 1次/秒)2 j/ W; a% K! W# K gps工作状态 (采集速度 1次/秒)4 I9 |) O2 N( W; K1 [6 B G 我在想如果usb虚拟串口要跑到什么速度才能满足这种密集的数据输出。 4 K" l8 W3 n' e 最后写一个pc软件 * G4 }' Q8 Q: Z " P1 u1 W$ s) ]' E2 y6 B& D& u' |8 s ; _1 p M9 K. p. c: I ![]() ) h! k% N( V1 C$ B- M 2 G" K8 l6 V& x+ `. B! S% [ / A0 N6 Y: @: R Andriod手机抓到的usb数据。( H' F, i; ]" ? ![]() S4 a" ]" w" B; z 演示视频$ V# ~0 n) S) E$ d1 w, o |
最全USB HID开发资料,悉心整理一个月,亲自测试
实战经验 | 选择USBX模块生成USB CDC ACM无PD的项目
STM32 USB HID键盘例程
刘氓兔的杂谈【001】-片上USB 高速PHY
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
【源码】STLINK-V3MINI 高速USB仿真器,成功改刷【高速CMSIS-DAP】
在线直播|无需编写任何代码即可在STM32上实现USB-C Power Delivery
STM32 USB CDC 虚拟多串口
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
USB Audio设计与实现
Andriod源代码包,在bin目录下可以找到编译好的安装apk。
验证是ok的,手机需要取得root权限。我用的手机是红米note2
顺便show一下我写的qst系统,用户层代码,是不是和Arduino有点像呢?
#include "qst_system.h". E' Y& s7 L4 f7 L' S6 [% E3 J4 l
const char S_JSON_BARO_HEAD[]={"\"Baro\":["};
uint32_t t,json_pkg_t;
void setup(void)9 H6 ^ I, P+ V7 g1 t* e; r# I
{* ], m! F% u% g* `0 r
ioMode(PB0,OUTPUT);
usbMode(0,0);- J4 V' c! p- B. L, {) ^
t = 0;
json_pkg_t=0;$ f& k* l K! @
}
$ ^! w- A! b, }. Y8 y4 I8 R
void loop(void)1 r( n0 `. L5 e% j5 e: W2 Z. r
{$ P$ i) k( \- ~/ U, f& C
WEATHER_INFO_TYPE *w = (WEATHER_INFO_TYPE*)qstMessage(&BaroTskInfo);6 p! V9 I. e& F5 p& `& }+ Y
* ^% w, z+ p) ?- o
if( compSystick(t) ){
if( ioRead(PB0)==LOW ){
ioWrite(PB0,HIGH);
t = msSystick()+10;
}else{8 _0 |/ d* M) H! M" q. {$ g7 y
ioWrite(PB0,LOW);" X f* S$ I* |0 X! U1 H
t = msSystick()+990;
}
}' }- C0 r1 D' s/ F$ P
- M4 m9 d0 w0 j! P3 s* r% u
//9 K- M! X7 b- r% c! t
if( compSystick(json_pkg_t) ){
json_pkg_t = msSystick()+1000;
printf("]\r\n%s\r\n",S_JSON_BARO_HEAD);( U2 v+ L% z9 q* a C
}
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; ( Z- Z8 c$ u% J o) ?
}
}# C) k5 J* e: k% k5 L! R
[飞鸽的qst系统的介绍]
QST是“飞鸽”基于STM32 ARM架构的一个前后台开源系统。
QST的优势" d: T7 M2 g2 D7 C7 h0 z2 U
1.基于32位的cortex-m3的ARM+ E" Q( U. F! F2 ~
2.采用嵌入式系统常用的KEIL ARM编译和调试环境,调试工具采用应用广泛的ULINK/JLINK JTAG仿真器。
3.分层系统架构(灵活、强大、简单):ST官方库 模块层 QST系统层用户应用层/ A! C, W( H, a) h& L
4.充分利用ARM本身的中断来进行实时任务处理,设计良好的程序主循环运行频率同样可以达到非常高的调用频率。
0 S; U3 E, L* l+ m
$ p: g: G% R( g5 s& h; I3 M. R
8 N. S9 G4 `' L O
谢谢分享啊 學習中