|
这个案子是我基于自己设计的QST系统完成的案子,总是想着怎么和Andriod手机相连。尝试用usb虚拟串口连接,终于通了。7 D/ x/ U/ U, e( Y% [7 {8 c7 W$ n! S 硬件:手头一个现成的带各种传感器的板子(bmp280,bma250,hmc5883,gps)+STM32F1034 {1 W G; Z- ^/ z# C' w 软件:基于自己设计的qst软件系统+USB虚拟串口驱动。 *居然可以热插拔usb,连上手机的otg线。这里要感谢usbhost的开发者,网上几乎找不到andriod手机连接虚拟串口的程序。 *虚拟串口连接winxp,win10也是可以的。 *软件还没法开放出来,代码需要整理一下。 * L/ C5 U, r1 z4 n9 o8 u+ n& r% | 项目完成后,大致的效果是,串口不断输出板子上各种传感器的参数,每个传感器的采集数据都带10秒以内的精确到毫秒的时间戳,输出: 气压 (采集速度 5次/秒) 温度 (采集速度 5次/秒) 海拔 (采集速度 5次/秒). u3 g7 D# U. m 陀螺仪x,y,z (采集速度 ?次/秒) 姿态(倾斜度,俯仰角)(采集速度 5次/秒) 指南角 (采集速度 10次/秒) gps经纬度 (采集速度 1次/秒)0 W, D. A: q8 @- u, g gps工作状态 (采集速度 1次/秒). k& y; [9 v0 ~ 6 N3 w* |7 X2 H" _- F0 t* F G( U% `6 h, m" r, F* M& b 我在想如果usb虚拟串口要跑到什么速度才能满足这种密集的数据输出。+ L9 R, o |4 v8 ^- n8 v 最后写一个pc软件 9 Z3 b+ z" J/ L% R* ]2 ]8 T% |' d 6 L- ?6 e1 ?; r# i2 E9 H& P
5 m0 G: I! [7 F 0 p- [ ?5 s0 x4 \& p/ l, u 1 M2 c3 X1 l$ L# p; q' A Andriod手机抓到的usb数据。8 n ?5 e1 {" b/ i- t+ }: k# t# S
x7 [3 l: [! m0 C0 H 9 A! B2 {% m; w( ^/ }, r: s 演示视频( b4 p2 ^3 O& g 2 x& x; b* S W5 f( v3 K9 |9 q9 C) n ; w. ^( e0 j2 T; L! Z ( i# \6 M6 S6 h( X |
最全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设计与实现
微信公众号
手机版
6 M u; H) M* B- j5 A; F8 {( _
Andriod源代码包,在bin目录下可以找到编译好的安装apk。
验证是ok的,手机需要取得root权限。我用的手机是红米note23 P6 [) w. v0 g- K
* I' P6 l: B6 l9 g& L1 z5 J
顺便show一下我写的qst系统,用户层代码,是不是和Arduino有点像呢?
#include "qst_system.h"
" G0 t$ A9 X! f& K8 m
const char S_JSON_BARO_HEAD[]={"\"Baro\":["};
uint32_t t,json_pkg_t;
$ r; T" L6 s; m& U2 z
void setup(void)
{% B0 B) b% i3 v# E( h. M# G
ioMode(PB0,OUTPUT);
usbMode(0,0);6 n8 I1 G3 F$ u: o
t = 0;- _0 H5 E; t1 q, f) W% K5 y
json_pkg_t=0;( M+ R2 Q( w5 h _: b7 L0 u" y! u
}6 D6 {/ o$ F0 C! e& S
$ d# U( l4 M4 Z+ k. H( x: ^: d
void loop(void)/ e- E: N8 e/ R0 g" D
{0 A7 G4 V4 v! j" L6 `3 O2 j$ l
WEATHER_INFO_TYPE *w = (WEATHER_INFO_TYPE*)qstMessage(&BaroTskInfo);
% }+ H# F1 y6 Y2 T5 D2 j
if( compSystick(t) ){* I( [% C! F" i& O4 J
if( ioRead(PB0)==LOW ){
ioWrite(PB0,HIGH);
t = msSystick()+10;4 h2 ^: W# `# J+ X5 v8 X
}else{/ E# t1 m9 s7 g" r' G, C9 r
ioWrite(PB0,LOW);
t = msSystick()+990;5 \- m" Z6 F( O( F+ t; N
}
} j; d. k: Y9 K- |1 g C/ z
//
if( compSystick(json_pkg_t) ){
json_pkg_t = msSystick()+1000;
printf("]\r\n%s\r\n",S_JSON_BARO_HEAD);) P+ K6 C& I; B7 S8 S
}
' w* o8 ]) M, m% K
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);. N% A8 f) z" O1 V
w->update = 0;
} 0 c% e2 m3 ?7 \# M
}5 Y3 T b, z H- k, j5 Z8 v4 e
b4 z1 P7 R- v p1 ^
' M. O$ S% K0 `4 c1 D9 |
/ c8 r: s1 X: Z! _; `
[飞鸽的qst系统的介绍]
QST是“飞鸽”基于STM32 ARM架构的一个前后台开源系统。
QST的优势5 l- g. S7 G6 b4 w
1.基于32位的cortex-m3的ARM) D1 b+ s7 p6 P+ A) q3 k3 {
2.采用嵌入式系统常用的KEIL ARM编译和调试环境,调试工具采用应用广泛的ULINK/JLINK JTAG仿真器。
3.分层系统架构(灵活、强大、简单):ST官方库 模块层 QST系统层用户应用层
4.充分利用ARM本身的中断来进行实时任务处理,设计良好的程序主循环运行频率同样可以达到非常高的调用频率。
0 [/ C0 N( l1 E8 c
, x( U, F& ~) s9 ~
& [- }; Y, {5 E, z5 n/ Q9 d( i7 p$ I7 a
- 用户应用层:应用开发5 X+ ]# Y( g3 Q4 H% U7 J
5 t9 @: U* @' P9 k2 _1 `! j4 R2 B" S6 i1 C6 F
谢谢分享啊 學習中