何曉東 徐樹良
摘要:現(xiàn)有一個無線調(diào)頻信號監(jiān)測功能模塊,用于測量FM信號的場強。本文設計一個方案,手機通過USB線連接該模塊,編寫手機APP實現(xiàn)通過手機對該模塊的進行參數(shù)設置、讀取場強等測量數(shù)據(jù)等功能。
關鍵詞:USB通信;USB OTG
中圖分類號:TP311文獻標識碼:A
文章編號:1009-3044(2020)22-0052-02
開放科學(資源服務)標識碼(OSID):
無線調(diào)頻信號監(jiān)測模塊(以下簡稱監(jiān)測模塊)屬于無線FM信號監(jiān)測系統(tǒng)的前端采集部分,無線FM信號監(jiān)測系統(tǒng)目的是把室外實時監(jiān)測的FM信號數(shù)據(jù)通過無線公網(wǎng)發(fā)送到遠端的數(shù)據(jù)庫保存。設計使用手機USB接口通過USB線連接監(jiān)測模塊,通過開發(fā)手機APP用于設置監(jiān)測模塊的監(jiān)測頻率等工作參數(shù)、啟動/停止監(jiān)測功能、接收監(jiān)測數(shù)據(jù)并顯示同時發(fā)送到遠程數(shù)據(jù)庫。
1 USB OTG簡介
USB(通用串行總線)是一個串行通信標準,廣泛用于手機、PC等設備。具有傳輸速度快、熱插拔等特點。一個日常的例子:手機通過USB線連接PC機,把手機拍攝的照片等文件傳輸?shù)絇C機保存。USB接口有5根線,分別是電源正、電源負、數(shù)據(jù)正、數(shù)據(jù)負、模式。USB通信模式分為USB HOST和USBOTG。
Host模式(主機模式),指在USB通信中PC為USB主機,其他的通信方為USB設備。USB主機控制數(shù)據(jù)的傳輸,USB設備只能同USB主機進行通信。例如:手機同PC的連接,PC是USB主機,手機是USB設備,由主機(PC)控制兩者間的通信。
OTG模式(無主機模式),指在USB通信中沒有USB主機(PC),通過模式線設置將其中的某設備設置為主設備,由主設備管理通信,從而解決沒有主機(PC)的情況下USB設備間的通信問題。例如:手機通過USB接口連接U盤。
在OTG模式中,若模式線懸空,則該設備被設置為USB設備。若模式線接地時,該設備被設置為主設備。手機USB接口具備OTG功能,只是通常的USB連接線只用4根線,手機端模式線未接(手機端USB接口芯片模式腳懸空),手機被設置為從設備,當用這種只有4根線USB連接線連接手機和PC機時,PC為主設備。
本方案采用USG OTC線(5線USB連接線),將其中的模式線接地(使手機端USB接口芯片模式腳接地),就能設定手機為主設備,同時監(jiān)測模塊設置為從設備,開發(fā)手機APP來使手機同監(jiān)測模塊間的進行通信,發(fā)送命令給監(jiān)測模塊和接收監(jiān)測模塊發(fā)送的監(jiān)測數(shù)據(jù)。
2 監(jiān)測模塊用單片機
監(jiān)測模塊的主控器采用具有USB OTG功能的單片機,型號是STM32F107RC,屬于ST公司ARM32位CORTEX-M3芯片,集成USB2.0 0TG接口,主頻74兆,RAM 64K,F(xiàn)LASH 256K.其中PA12、PA13分別是USB_OTG_FS_DP和USB_OTG_FS_DM腳,需軟件配置為USB DEVICE模式。
3 監(jiān)測模塊USB通信相關程序設計
主要是編寫USBD_CustomHID_fops_FS中相關函數(shù)實現(xiàn),主要是USTOM_HID_Recv_FS和USBD_CUSTOM—HID_SendRe-port_FS函數(shù),分別是USB消息接收函數(shù)和發(fā)送函數(shù)。
3.1 接收函數(shù)
該函數(shù)為接收手機通過USB發(fā)送的信息,函數(shù)框架為:
static int8_t CUSTOM_HID_Recv_FS(uint8_t*Buf, uint32_t*Len)
{
//端點2接收中斷清零
EP2_INT_Comein=0;
//復制接收的信息到用戶定義的存儲區(qū)(在主程序中處理接收的信息)
CopyStr(Buf,Rx_ORDER_Buffer,*Len);
//修改接收標識為1,表示接收到主機信息
order_stat=l;
//返回結(jié)果
return (USBD_OK);
)
3.2 發(fā)送函數(shù)
該函數(shù)實現(xiàn)通過USB向手機發(fā)送信息
static int8_t USBD_CUSTOM_HID_SendReport_FS(uint8_t*report, uint16_t len,uint8_t ep_addr)
{
//直接調(diào)用底層函數(shù)發(fā)送
return USBD_CUSTOM___ HID—SendReport(&hUsbDeviceFS,report, len,ep_addr);
}
3.3 主程序結(jié)構(gòu)
主程序循環(huán)調(diào)用dispatch函數(shù),在dispatch函數(shù)中檢查信息接收標識,處理手機發(fā)送的命令,并把結(jié)果發(fā)送回手機。Dis-patch函數(shù)框架如下:
void Dispatch(void)
{//
ifTorder_staty/usbin節(jié)點收到信號標識
{
order_stat= 0;//清除接收標識
USB_HandOrder20;//處理接收到的命令(略)
)
if(UpdateMonitory/是否需要新的監(jiān)測數(shù)據(jù)
{
UpdateMonitor=0;
uint16_t length=2;//準備數(shù)據(jù)
UsbUpLoardDataBuffer[0]_ (uint8_t) (hostcommand. comman-did);//命令ID
UsbUpLoardDataBuffer[l] =seqtag++;length+=ConvertToBytes(hostcommand. freql, &(UsbUpLoardDataBuffer[2]);,/填充監(jiān)測頻率
length+=FiIIES(&(UsbUpLoardDataBuffer[6]》;//填充監(jiān)測的信號場強
length+=FiIISN (&(UsbUpLoardD ataBuffer[7]);//填充監(jiān)測的信號SN
length=8;//設置數(shù)據(jù)長度
//發(fā)送數(shù)據(jù)到主設備USBD_CustomHID_fops_FS. SentData(UsbUpLoardDataBuffer,length,CUSTOM_HID_EPIN I_ADDR);
】
)
4 手機USB通信相關程序設計
接收監(jiān)測模塊發(fā)送的數(shù)據(jù)線程框架:
class usbRecvMessagThreadextends Thread{
UsbEndpointepln;
UsbDeviceConnectionusbconnection;private Handler messagHandler;//
public usbRecvMessagThread(UsbDeviceConnection connec-tion, UsbEndpointepln, Handler msgHandler){
this.connection= connection;this.epln= epln;
this.messagHandler= msgHandler;
)
public void run0{
byte[] RecvBuffer= new byte[64];,/創(chuàng)建緩沖區(qū),
intlength= RecvBuff'er.length;
inttimeout= 6000;
while (!Thread.interrupted0){
intrecvcount = connection. bulkTransfer(epln, RecvBuffer,length, timeout);//接收數(shù)據(jù)
if (recvcount<0){//沒有接收到數(shù)據(jù),則繼續(xù)循環(huán)
continue;
)
Message message= new Message0;//創(chuàng)建新消息
message.what= Ox2678;
message.obj= RecvBuffer;
messageHandler. sendMessage(message);//發(fā)送接收的消息(在主程序處理)
)
】
)
5 結(jié)束語
通過對STM32F107數(shù)據(jù)手冊的研讀和參考相關USB OTG的資料和例程,結(jié)合監(jiān)測需求,實現(xiàn)了手機同監(jiān)測模塊的通信,經(jīng)測試,達到了預期的功能。
參考文獻:
[1]周立功.等.USB2.0與OTG規(guī)范及開發(fā)指南[M].北京:北京航空航天大學出版社,2004.
[2]王翠萍.Android Studio應用開發(fā)實戰(zhàn)詳解[M].北京:人民郵電出版社。2017.
【通聯(lián)編輯:聞翔軍】
基金項目:安徽省教育廳自然科學重點項目“無線廣播信號覆蓋監(jiān)測系統(tǒng)開發(fā)”(編號KJ2016A113)
作者簡介:何曉東(1968-),男,安徽長豐人,副教授,研究方向為計算機應用技術;徐樹良(1986-),男,安徽休寧人,工程碩士,研究方向為計算機應用技術。