【正文】
接口描述符HID描符符 報(bào)告描符符物理串描符符端點(diǎn)描述符 HID設(shè)備描述符結(jié)構(gòu) USB鼠標(biāo)的運(yùn)行①程序采用JTAG下載,將開發(fā)板通過下載器連接到電腦,并用一根USB數(shù)據(jù)線把開發(fā)板連接到電腦的USB上。③檢查無誤后,點(diǎn)擊“Target Option”按鈕可查看芯片類型和下載方式,點(diǎn)擊“Debug”設(shè)置完成后,在主界面點(diǎn)擊“Download”下載。電腦會(huì)提示“找到新的USB設(shè)備”,因?yàn)槭菢?biāo)準(zhǔn)USB設(shè)備,所電腦會(huì)自動(dòng)安裝驅(qū)動(dòng)。 硬件實(shí)現(xiàn)。 STM32F103開發(fā)板河南城建學(xué)院本科畢業(yè)設(shè)計(jì)(論文) 設(shè)計(jì)總結(jié) 設(shè)計(jì)總結(jié) 隨著計(jì)算機(jī)技術(shù)的發(fā)展,個(gè)人電腦的價(jià)格越來越低,現(xiàn)在基本上每個(gè)家庭都有一臺(tái)電腦,而鼠標(biāo)作為與電腦配套的設(shè)備之一,正處于開發(fā)研制的高潮。論文研究了基于STM32的嵌入式系統(tǒng)的實(shí)現(xiàn)方案,并對(duì)HID協(xié)議和USB的標(biāo)準(zhǔn)請(qǐng)求進(jìn)行了深入學(xué)習(xí),最終實(shí)現(xiàn)了以STM32為核心的USB簡(jiǎn)易鼠標(biāo)?,F(xiàn)在的電腦都至少配備了兩個(gè)以上的USB接口,不夠用的話,還可以用USB集線器拓展,非常方便,所以USB設(shè)備的應(yīng)用前景非常廣闊。 本論文主要完成了以下工作: 學(xué)習(xí)了USB協(xié)議,并對(duì)HID設(shè)備進(jìn)行了深入的研究與分析; 了解STM32單片機(jī),熟練掌握了STM32F103開發(fā)板的使用; 對(duì)HID設(shè)備的開發(fā)流程開發(fā)和程序進(jìn)行分析與學(xué)習(xí); 編寫了程序代碼并下載驗(yàn)證,對(duì)程序中的錯(cuò)誤經(jīng)過多次的修改,最終達(dá)到理想結(jié)果。本來選這個(gè)題目就是為了學(xué)東西,雖然我確實(shí)沒有什么天賦,但不論遇到什么困難,都不能讓我止步。還有就是設(shè)備有顯示但就是不能工作的問題,通過向同學(xué)和老師請(qǐng)教,原來是報(bào)告描述符的程序出錯(cuò),修改之后就完美運(yùn)行了。Yes39。 64/****************************************************************** Function Name : main* Description : Main program* Input : None* Output : None* Return : None* Attention : None*****************************************************************/int main(void){Set_System()。Set_USBClock()。while (1){ if (bDeviceState == CONFIGURED) { if (JoyState() != 0) { Joystick_Send(JoyState())。 nCount != 0。 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE)。 = GPIO_Speed_50MHz。 GPIO_Init(GPIOB, amp。} ifdef USE_FULL_ASSERT/** * brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * param file: pointer to the source file name * param line: assert_param error line source number * retval None */void assert_failed(uint8_t* file, uint32_t line){ /* User can add his own implementation to report the file name and line number, ex: printf(Wrong parameters value: file %s on line %d\r\n, file, line) */ /* Infinite loop */ while (1) { }}endif/*****************************************************************END FILE*****************************************************************/附錄B /********************************************************************* * File Name : * Author : fakor * Version : * Date : 05/21/2015 * Description : Descriptors for Joystick Mouse Demo*********************************************************************** THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.*********************************************************************//* Includes */include include /* Private typedef *//* Private define *//* Private macro *//* Private variables *//* Extern variables *//* Private function prototypes *//* Private functions *//*******************USB Standard Device Descriptor************************************** 標(biāo)準(zhǔn)設(shè)備描述符***********************/const uint8_t Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] = { 0x12, /*bLength 描述符長(zhǎng)度*/USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType描述符類型(設(shè)備描述符 為0x01)*/ 0x00, /*bcdUSB USB協(xié)議版本*/ 0x02, 0x00, /*bDeviceClass類代碼*/ 0x00, /*bDeviceSubClass子類代碼*/ 0x00, /*bDeviceProtocol設(shè)備使用的協(xié)議*/ 0x40, /*bMaxPacketSize 64端點(diǎn)0最大包長(zhǎng)*/ 0x83, /*idVendor (0x0483)廠商ID*/ 0x04, 0x10, /*idProduct = 0x5710產(chǎn)品ID*/ 0x57, 0x00, /*bcdDevice rel. */ 0x02, 1, /*Index of string descriptor describing Manufacturer描述廠商的字符串的索引 */ 2, /*Index of string descriptor describing product描述產(chǎn)品的字符串的索引*/3, /*Index of string descriptor describing the device serial number產(chǎn)品序列號(hào)字 符串的索引 */ 0x01 /*bNumConfigurations可能的配置數(shù)*/ }。/******************* MOUSE_ConfigDescriptor ****************************************用于實(shí)現(xiàn)鼠標(biāo)具體功能的報(bào)告描述符***************/const uint8_t Joystick_ReportDescriptor[JOYSTICK_SIZ_REPORT_DESC] = { 0x05, /*Usage Page(Generic Desktop)*/ 0x01, 0x09, /*Usage(Mouse)*/ 0x02, 0xA1, /*Collection(Logical)*/ 0x01, 0x09, /*Usage(Pointer)*/ 0x01, /* 8 */ 0xA1, /*Collection(Linked)*/ 0x00, 0x05, /*Usage Page(Buttons)*/ 0x09, 0x19, /*Usage Minimum(1)*/ 0x01, 0x29, /*Usage Maximum(3)*/ 0x03, /* 16 */ 0x15, /*Logical Minimum(0)*/ 0x00, 0x25, /*Logical Maximum(1)*/ 0x01, 0x95, /*Report Count(3)*/ 0x03, 0x75, /*Report Size(1)*/ 0x01, /* 24 */ 0x81, /*Input(Var