这个案子是我基于自己设计的QST系统完成的案子,总是想着怎么和Andriod手机相连。尝试用usb虚拟串口连接,终于通了。 c* g( h* |8 i7 p. o 硬件:手头一个现成的带各种传感器的板子(bmp280,bma250,hmc5883,gps)+STM32F103/ f/ t/ y `. x A K0 _ 软件:基于自己设计的qst软件系统+USB虚拟串口驱动。: ?/ s# F, v7 T4 r l+ L! s9 G1 I5 b! L *居然可以热插拔usb,连上手机的otg线。这里要感谢usbhost的开发者,网上几乎找不到andriod手机连接虚拟串口的程序。- v% P% g4 A+ \8 z *虚拟串口连接winxp,win10也是可以的。 *软件还没法开放出来,代码需要整理一下。7 T, L: B% T& y3 A) p( @4 `' i 项目完成后,大致的效果是,串口不断输出板子上各种传感器的参数,每个传感器的采集数据都带10秒以内的精确到毫秒的时间戳,输出: 气压 (采集速度 5次/秒) 温度 (采集速度 5次/秒)6 K/ C8 g: p# p; ^+ {4 B, j 海拔 (采集速度 5次/秒)7 d- q; t) z% c0 Z( i& ` 陀螺仪x,y,z (采集速度 ?次/秒)% R# B; j; E* D6 H 姿态(倾斜度,俯仰角)(采集速度 5次/秒)2 Y1 c4 O. A3 f/ x4 r 指南角 (采集速度 10次/秒) gps经纬度 (采集速度 1次/秒)$ }4 _1 c, @1 V: [1 R; x% T& E gps工作状态 (采集速度 1次/秒)& Z( l8 _1 h' [ 我在想如果usb虚拟串口要跑到什么速度才能满足这种密集的数据输出。% E. o1 Y+ L: k 最后写一个pc软件8 l$ L0 U$ Y+ a; i5 c6 | " n* {3 k7 o( ^& ~ : L- Z( v( t/ s3 x" E * U- P3 M( [! u4 G' i; i 3 p. m8 }4 r3 P8 W- g# G Andriod手机抓到的usb数据。 : A; x7 O" H, r4 o1 y& F % ~$ ^( E+ Y& k$ R* q1 O 演示视频1 K' l1 I( u. u+ P4 d& p: H3 F$ n/ t ' H( e _/ h9 b" h- x+ O! m5 X 0 ]3 J F: S* G9 I2 c |
最全USB HID开发资料,悉心整理一个月,亲自测试
USB Audio设计与实现
【MCU实战经验】+STM32F107的USB使用
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32 USB-HID通信移植步骤STM32 USB HID键盘例程
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
如何让CDC类USB设备批量接收64字节以上数据
用STM32F4实现的USB摄像头UVC,配合上位机可识别车牌
STM32 USB CDC 虚拟多串口
Andriod源代码包,在bin目录下可以找到编译好的安装apk。3 m, z# j$ [. y5 q
验证是ok的,手机需要取得root权限。我用的手机是红米note28 P; M8 y8 d0 ]; @; E3 b
! `+ `5 \. m: k& Y q1 w- Y- m
顺便show一下我写的qst系统,用户层代码,是不是和Arduino有点像呢?
; ~( ~1 H: T6 M# I, n
#include "qst_system.h"
|9 v( ^$ n J: F
const char S_JSON_BARO_HEAD[]={"\"Baro\":["};
uint32_t t,json_pkg_t;
void setup(void)! @* Y h! ^8 b* p
{& i/ f- K; B/ N4 S+ L3 {: h, _
ioMode(PB0,OUTPUT);
usbMode(0,0);- W" O* N$ o2 d; u7 |% [
t = 0;
json_pkg_t=0;. B# h/ A6 U) z4 g2 M
}9 k7 j: G. y4 O0 r
void loop(void) M$ Z8 d# u4 D/ e: L! [2 ?
{7 L0 m& o2 d/ Z. J* _9 j
WEATHER_INFO_TYPE *w = (WEATHER_INFO_TYPE*)qstMessage(&BaroTskInfo);
if( compSystick(t) ){
if( ioRead(PB0)==LOW ){0 B; ?$ X/ M1 m2 N
ioWrite(PB0,HIGH);
t = msSystick()+10;
}else{
ioWrite(PB0,LOW);6 w$ Z0 d* i6 D% @/ Z- O
t = msSystick()+990;; }8 G9 s1 X: s. q
}
}
//5 l$ w( E M7 ?7 a1 `; n: Q
if( compSystick(json_pkg_t) ){; s0 l5 n6 a+ e# W
json_pkg_t = msSystick()+1000;
printf("]\r\n%s\r\n",S_JSON_BARO_HEAD);
}% C$ y; m& g" {$ g9 W+ q9 N
& Y9 Q; @4 E8 Z `% R& q
if( w->update ){; P! \- ` [5 |& w3 u0 Z
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);9 Y: B% X+ q3 O, y! I# {& y
w->update = 0; % x% r6 I, I) r: [$ S- ~, D
} + O2 ?& `2 ?& k1 \1 X% A) r
}
! I2 a) P% m% @0 `- m2 ?
1 W" P0 u& B$ g. p3 m
0 n' T5 g# x9 K7 f8 o+ }1 W. ~! C" [
& w/ F" R' c( z4 B' t; E
[飞鸽的qst系统的介绍]8 V, Z. e1 r/ ]# `9 ]% `6 L
QST是“飞鸽”基于STM32 ARM架构的一个前后台开源系统。
QST的优势
1.基于32位的cortex-m3的ARM
2.采用嵌入式系统常用的KEIL ARM编译和调试环境,调试工具采用应用广泛的ULINK/JLINK JTAG仿真器。
3.分层系统架构(灵活、强大、简单):ST官方库 模块层 QST系统层用户应用层
4.充分利用ARM本身的中断来进行实时任务处理,设计良好的程序主循环运行频率同样可以达到非常高的调用频率。
2 }& c9 M$ E: b" U0 }9 }: v( U
- 用户应用层:应用开发- Z( M5 e2 G. y- X! S
. k- {) Z5 _. B$ q6 Z6 B- G6 C# r1 `" I7 o' v9 }/ \# a9 T: q& k5 m: z
谢谢分享啊 學習中