基于USB HID類(lèi)數(shù)據(jù)通信的直流電源監(jiān)控設(shè)計(jì)
3 USB HID接口系統(tǒng)設(shè)計(jì)
USB接口系統(tǒng)框圖如圖4所示,USB接口系統(tǒng)有3個(gè)部分組成:USB主機(jī),USB設(shè)備和USB互連;USB設(shè)備分為集線器(Hub)和功能(Function)兩類(lèi),集線器為USB端口擴(kuò)展用,本設(shè)計(jì)USB設(shè)備為功能類(lèi)即下位機(jī),到主計(jì)算機(jī)的USB接口叫做USB主機(jī),USB互連主要是USB設(shè)備與主機(jī)的連接和通信。由圖4可知要實(shí)現(xiàn)本設(shè)計(jì)中的USB接口,對(duì)于上位機(jī)需要調(diào)用HID類(lèi)的驅(qū)動(dòng)完成上位機(jī)程序編寫(xiě),對(duì)于下位機(jī)要設(shè)計(jì)接口硬件電路和利用固件庫(kù)完成數(shù)據(jù)收發(fā)工作。本文引用地址:http://2s4d.com/article/175749.htm
3.1 接口硬件設(shè)計(jì)
STM32F107X擁有符合USB 2.0(全速12 MB/s)并支持主從設(shè)備轉(zhuǎn)換(On-The-Go)的標(biāo)準(zhǔn)外設(shè),在本設(shè)計(jì)中USB外設(shè)只工作在設(shè)備模式下,但在接口硬件設(shè)計(jì)時(shí)為主機(jī)模式留了余地,方便以后設(shè)備升級(jí)為OTG USB。STM32F107的PA10、PA11和PA12引腳分別對(duì)應(yīng)OTG USB的ID、DM和DP信號(hào)線,設(shè)計(jì)時(shí)只要連接到USB的接插件即可。OTG USB比其他USB多出的ID信號(hào)線是用于兩個(gè)OTG USB互連時(shí)協(xié)調(diào)主從關(guān)系的,另外OTG USB的電源需要是可控的:可以選擇由總線供電又可以由自己供電;所以設(shè)計(jì)時(shí)USB電源需經(jīng)一個(gè)IO控制的開(kāi)關(guān)(三極管即可)上拉到電源。
3.2 下位機(jī)軟件設(shè)計(jì)
本設(shè)計(jì)利用ST公司為STM32系列提供的USB固件庫(kù)(本設(shè)計(jì)采用USB-FS Device library V3.3)完成下位機(jī)HID類(lèi)程序的編寫(xiě)。USB固件庫(kù)在下位機(jī)中的具體運(yùn)用方法可參考文獻(xiàn),USB固件庫(kù)被分為硬件驅(qū)動(dòng)層(STM32_USB-FS_Device_Driver)和應(yīng)用接口層(Application Interlace layer),硬件驅(qū)動(dòng)層管理USB的硬件設(shè)備和USB標(biāo)準(zhǔn)協(xié)議的直接交互,它又由Low Layer和Medium Layer兩個(gè)層組成,應(yīng)用接口層在最終應(yīng)用和USB固件庫(kù)核心之間為用戶提供了一個(gè)完整的接口,我們只需要修改和使用應(yīng)用接口層的的函數(shù)即可完成下位機(jī)的HID類(lèi)程序編寫(xiě),整個(gè)固件庫(kù)中應(yīng)用接口層的文件及其各自作用:usb_conf.h是配置文件、usb_desc(.h,.c)是USB設(shè)備描述文件、usb_prop(.h,.c)是USB設(shè)備特定屬性設(shè)置文件、usb_endp.c是非控制端點(diǎn)的正確傳輸中斷服務(wù)文件、usb_istr(.h,.c)是USB設(shè)備中斷處理文件和usb_pwr(.h,.c)是USB設(shè)備電源和連接管理文件。
USB下位機(jī)程序分為3部分:USB控制器的初始化、主機(jī)請(qǐng)求響應(yīng)和通信數(shù)據(jù)收發(fā)3個(gè)部分:USB控制器的初始化包括端點(diǎn)的使能、中斷方式、數(shù)據(jù)緩存的設(shè)置等;USB HID類(lèi)設(shè)備固件程序至少需要響應(yīng)獲取描述符(GET_DESCRIPTOR)、設(shè)置地址(SET_ADDRESS)、設(shè)置配置(SET_CONF IGURAT ION)、設(shè)置閑置(Set_Idle)四種請(qǐng)求;通信數(shù)據(jù)收發(fā)部分的主要工作是以中斷方式向數(shù)據(jù)緩沖區(qū)讀寫(xiě)數(shù)據(jù)。另外ST公司提供了Custom _HID案例,只需要在此基礎(chǔ)上修改就可實(shí)現(xiàn)本設(shè)計(jì)的HID類(lèi)。
USB控制器的初始化我們需要修改usb_prop(.h,.c)文件中的CustomHID_Reset(void)函數(shù)使其初始化端點(diǎn)的數(shù)據(jù)量達(dá)到自己的需求。主機(jī)請(qǐng)求響應(yīng)和通信數(shù)據(jù)收發(fā)本設(shè)計(jì)都是采用的中斷方式,下位機(jī)程序在Stm32f10x_it.c文件內(nèi)處理下位機(jī)所有中斷,USB中斷的情況下程序會(huì)跳轉(zhuǎn)到usb_istr.c文件中處理所有USB中斷,USB中斷分為端點(diǎn)中斷和非端點(diǎn)中斷,非端點(diǎn)中斷主要包括各種協(xié)議上的中斷(總線掛起、復(fù)位、喚醒,幀起始、應(yīng)答等),非端點(diǎn)中斷程序?qū)?huì)跳轉(zhuǎn)其他文件處理,端點(diǎn)中斷的情況下程序會(huì)跳轉(zhuǎn)到otgd_fs_int.c文件處理所有端點(diǎn)中斷,端點(diǎn)中斷分為控制端點(diǎn)中斷和其他端點(diǎn)中斷,控制端點(diǎn)主要用于枚舉它的處理程序我們不需要改動(dòng),我們的數(shù)據(jù)通信使用的是其他端點(diǎn)中斷,其他端點(diǎn)中斷的情況下程序?qū)⑻D(zhuǎn)到usb_endp.c文件使用自定義的用戶處理函數(shù),本設(shè)計(jì)需要編寫(xiě)這些自定義的用戶處理函數(shù)完成通信數(shù)據(jù)收發(fā)部分設(shè)計(jì),例如如在接受中斷中使用USB_SIL_Read(EP1_OUT,Receive_Buffer)函數(shù)可以將端點(diǎn)1(OUT)的數(shù)據(jù)讀到Receive_Buff er[]數(shù)組中。對(duì)于主機(jī)請(qǐng)求程序在Custom_HID案例的基礎(chǔ)上需要修改usb_desc(.h,.c)中的設(shè)備、配置和報(bào)告描述符后由程序內(nèi)部函數(shù)(控制端點(diǎn)中斷的處理函數(shù))使用這些描述符完成USB枚舉過(guò)程,修改比較多的是端點(diǎn)描述符和報(bào)告描述符,具體修改可以參考文獻(xiàn)。
3.3 PC上位機(jī)程序編寫(xiě)
本設(shè)計(jì)的USB HID上位機(jī)應(yīng)用程序是在VC2010集成開(kāi)發(fā)環(huán)境下,利用Windows自帶HID類(lèi)驅(qū)動(dòng)的API和PlotLab(一個(gè)快速信號(hào)繪圖和可視化的VCL組件)開(kāi)發(fā)的多線程人機(jī)交互界面。上位機(jī)程序流程圖如圖5所示,上位機(jī)程序是MFC的對(duì)話框程序,程序的界面負(fù)責(zé)顯示和接受用戶的輸入,在程序的開(kāi)始建立了兩個(gè)線程和一個(gè)多媒體定時(shí)器,兩個(gè)線程分別為讀數(shù)據(jù)和寫(xiě)數(shù)據(jù)服務(wù),多媒體定時(shí)器的中斷為顯示波形服務(wù)。
pid控制器相關(guān)文章:pid控制器原理
評(píng)論