
这个案子是我基于自己设计的QST系统完成的案子,总是想着怎么和Andriod手机相连。尝试用usb虚拟串口连接,终于通了。 硬件:手头一个现成的带各种传感器的板子(bmp280,bma250,hmc5883,gps)+STM32F103" o2 g) v* N( B) V* s' x8 q7 Q 软件:基于自己设计的qst软件系统+USB虚拟串口驱动。& j i, _$ R' A& k/ {9 L *居然可以热插拔usb,连上手机的otg线。这里要感谢usbhost的开发者,网上几乎找不到andriod手机连接虚拟串口的程序。) ^% |" E; D3 y {' m# L2 R3 K *虚拟串口连接winxp,win10也是可以的。 *软件还没法开放出来,代码需要整理一下。 ! C5 a3 S" W0 i) j( z2 z; _ 项目完成后,大致的效果是,串口不断输出板子上各种传感器的参数,每个传感器的采集数据都带10秒以内的精确到毫秒的时间戳,输出:, J" q8 ^( l8 {1 C+ x. ?0 o0 ] 气压 (采集速度 5次/秒) 温度 (采集速度 5次/秒)* c) A+ h2 S/ t$ b 海拔 (采集速度 5次/秒) 陀螺仪x,y,z (采集速度 ?次/秒) 姿态(倾斜度,俯仰角)(采集速度 5次/秒)7 S- v& V3 ^9 O M9 E" L$ ^ 指南角 (采集速度 10次/秒) gps经纬度 (采集速度 1次/秒) gps工作状态 (采集速度 1次/秒) 我在想如果usb虚拟串口要跑到什么速度才能满足这种密集的数据输出。4 k6 `' {& O3 v5 P; \ : T/ A# w5 U! d* e; P3 q7 W, I 最后写一个pc软件 c# N: k- p- ^/ J3 X2 W % R) q/ Y/ L, w1 ^ ![]() " J' X: ~! W) W. |0 f: j ) z& k& @2 n5 t A& u Andriod手机抓到的usb数据。6 J; K. R. a2 b- I* d$ K7 ? ![]() 1 }% F6 A4 E/ \ [/ i 4 Q# J( M1 [" d- p, c2 r 演示视频 |
最全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设计与实现
; O! R. [6 G0 `: {& B; m7 N# `
Andriod源代码包,在bin目录下可以找到编译好的安装apk。' M+ t! `6 q% m! n$ {- ^$ [* S
验证是ok的,手机需要取得root权限。我用的手机是红米note2
5 x7 X6 R3 e1 m9 n6 ]! s
顺便show一下我写的qst系统,用户层代码,是不是和Arduino有点像呢?
* A, v [$ ?! Y2 D4 O
2 e' k) H. V; _" @( s
#include "qst_system.h"
const char S_JSON_BARO_HEAD[]={"\"Baro\":["};
uint32_t t,json_pkg_t;" S/ r+ [( B- L3 c8 `
void setup(void)
{* x7 P/ [- f. e$ S4 d; m/ H
ioMode(PB0,OUTPUT);- r( Q5 m6 f6 R9 _: [3 t. |
usbMode(0,0);
t = 0;+ | }: q1 y( T+ P6 G: E' J- G
json_pkg_t=0;
}
void loop(void)- \5 o3 M& R( ?# S( |# n2 J% [
{
WEATHER_INFO_TYPE *w = (WEATHER_INFO_TYPE*)qstMessage(&BaroTskInfo);
if( compSystick(t) ){
if( ioRead(PB0)==LOW ){0 e$ \; H1 A1 R8 B, s$ Z
ioWrite(PB0,HIGH);
t = msSystick()+10;
}else{
ioWrite(PB0,LOW);3 W- G# D6 c3 ]2 W, k& _, p
t = msSystick()+990;8 t y) A8 a) T9 L1 P3 k
}3 V! ?# z' ~# J3 I! F+ L/ {
}
. A9 r4 g9 C2 g
//1 Z/ T7 {4 u9 a4 y# U- M
if( compSystick(json_pkg_t) ){2 m' s0 T6 |! H* Q6 w6 G
json_pkg_t = msSystick()+1000;
printf("]\r\n%s\r\n",S_JSON_BARO_HEAD);' E8 d' j/ p& ]' l( \6 `" F3 ]9 n
}7 _/ v( B. t& Q. j; |8 T1 M
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;
} @0 o4 E8 _/ ~, \9 U+ ]/ Z: u- q
}; o; S0 W2 J- C, n
0 x6 w1 w3 o9 c& y" ^- ?3 h
[飞鸽的qst系统的介绍]
QST是“飞鸽”基于STM32 ARM架构的一个前后台开源系统。
QST的优势
1.基于32位的cortex-m3的ARM
2.采用嵌入式系统常用的KEIL ARM编译和调试环境,调试工具采用应用广泛的ULINK/JLINK JTAG仿真器。: Z0 }! E# F7 l) Q, Q9 x. i
3.分层系统架构(灵活、强大、简单):ST官方库 模块层 QST系统层用户应用层0 d5 ]8 i* a2 P" Z" u! K
4.充分利用ARM本身的中断来进行实时任务处理,设计良好的程序主循环运行频率同样可以达到非常高的调用频率。9 ~% l& D, I7 ~% F$ o; U: n2 z, A
- f% b0 M, [ u& F. i. T; h
/ J' i2 u4 T* k+ J/ M" T
谢谢分享啊 學習中