stm32f105vct6例程_STM32F107VCT6 107USB例程USB DEVICE例程
2、DEVICE_MSC例程說明
2.1、MSC簡介
USB大容量存儲設備類(The USB mass storage device class)是一種計算機和移動設備之間的傳輸協議,它允許一個通用串行總線(USB)設備來訪問主機的計算設備,使兩者之間進行文件傳輸。
USB海量存儲設備類包括通信協議定義和通用串行總線運行的計算。本標準規定了各種存儲設備的接口。通過這個標準的計算機連接到的設備包括:移動硬盤、U盤、數碼相機、各種數字音頻播放器和便攜式媒體播放器、手機。
本例程當中我們采用的是2G的SD卡,因為按照官網的SD卡的初始化,不支持SDHC卡,也就是大于2G以上的卡,暫時支持2G及2G以下的SD卡,因為STM32F107上沒有SDIO外設模塊,所以我們只能用SPI的方式進行對SD卡進行讀寫。2.2、硬件說明
本實驗涉及到USB的接口,以及SD卡。因為USB端口的兩個引腳和USART1的兩個引腳共用,所以要注意跳線帽JP10和JP11要接在1-2上。此外,就是要注意boot的選擇,即JP4和JP7接在2-3上。電路圖如下圖所示:
圖片22.png (45.51 KB, 下載次數: 0)
2015-4-28 14:40 上傳
圖片21.png (42.37 KB, 下載次數: 0)
2015-4-28 14:40 上傳2.3、程序說明
從主程序看出,USB的設置依舊是只調用了一個初始化函數,其形參是幾個結構體,通過調用結構體里面的函數,實現對USB的初始化設置。
我們這里主要看一下都對哪些進行了配置,在usb_bsp.c文件里面主要對USB所使用到的USB的中斷做了一些配置。以及USB的時鐘配置。
圖片20.png (16.93 KB, 下載次數: 0)
2015-4-28 14:40 上傳
在usbd_usr.c文件中涉及的是關于屏的一些初始化,以及顯示屏要顯示的一些實時信息。這里面也是通過一個結構體來實現函數的調用。
圖片19.png (8.57 KB, 下載次數: 0)
2015-4-28 14:40 上傳
其中我們主要看void USBD_USR_Init(void)函數里面的一些對相關硬件的初始化,其中首先對主函數中涉及到用來指示程序運行的四個LED燈的端口的初始化,然后是是LCD的初始化的設置。以及初始化之后屏幕要顯示的內容。再往下的函數,沒有什么太多的作用,都是作為屏一些的顯示,用來指示設備現在的運行情況。包括USB喚醒,以及是否插入主機等一些操作的實時顯示。
圖片18.png (19.71 KB, 下載次數: 0)
2015-4-28 14:40 上傳
下面看usbd_desc.c文件里面的內容,該文件中主要涉及就是USB的設置的關鍵部分,各種描述符的設置,詳細的描述符的意義,這里不做介紹,大家可以去詳細閱讀USB的協議規范。用戶可以根據自己的需要修改相應的描述符,以實現不同的功能。
MSC比HID多了一個文檔,就是usbd_storage_msd.c文件,里面主要定義了一些關于USB讀寫數據的函數與SD卡的讀寫操作函數的接口。這些函數也是使用的一個結構體來實現調用。
圖片17.png (8.66 KB, 下載次數: 0)
2015-4-28 14:40 上傳
其中主要看一下對SD卡的讀寫函數
圖片16.png (20.85 KB, 下載次數: 1)
2015-4-28 14:40 上傳
接下來要看的就是中斷文件stm32fxxx_it.c里面的函數,在這里面,我們主要關心的是void OTG_FS_IRQHandler(void)函數,在MSC實驗當中,我們把開發板做成一個讀卡器,他只能被動的接收主機發送過來的命令,所以107響應中斷,進行相應的操作,進行數據的傳輸。
圖片15.png (6.7 KB, 下載次數: 0)
2015-4-28 14:40 上傳
我們可以定位到這個中斷函數定義在usb_dcd_int.c文件中,從下圖中我們可以看到主要的兩個數據的輸入和輸出函數,我們以其中一個為例找函數的調用關系。
圖片14.png (17.42 KB, 下載次數: 0)
2015-4-28 14:40 上傳
該函數在usb_dcd_int.c文件中,找到對應的端口號,然后調用下面的函數,以及判斷是否使用DMA。
圖片13.png (25.06 KB, 下載次數: 0)
2015-4-28 14:40 上傳
下面的幾個函數在usbd_core.c中,大家可以根據右邊的行號,找到對應的代碼。
圖片12.png (14.25 KB, 下載次數: 0)
2015-4-28 14:40 上傳
圖片11.png (25.35 KB, 下載次數: 0)
2015-4-28 14:40 上傳
這下面的函數在usbd_msc_core.c中,通過右邊的行號,找到到對應的代碼。
圖片10.png (10.73 KB, 下載次數: 0)
2015-4-28 14:40 上傳
圖片9.png (6.43 KB, 下載次數: 0)
2015-4-28 14:40 上傳
下面的函數在usbd_msc_bot.c中。
圖片8.png (13.46 KB, 下載次數: 0)
2015-4-28 14:40 上傳
下面的幾個函數在usbd_msc_scsi.c中
圖片7.png (27.14 KB, 下載次數: 0)
2015-4-28 14:40 上傳
圖片6.png (17.07 KB, 下載次數: 0)
2015-4-28 14:40 上傳
圖片5.png (10.89 KB, 下載次數: 1)
2015-4-28 14:40 上傳
下面的函數在usbd_storage_msd.c中。
圖片4.png (12.1 KB, 下載次數: 0)
2015-4-28 14:39 上傳
圖片3.png (9.04 KB, 下載次數: 0)
2015-4-28 14:39 上傳
我們可以看到,經過層層的調用,終于回到了對SD卡的底層操作,實現對SD卡上的數據進行讀寫操作。2.4、實驗現象
下載程序,找一個2G或者2G以下的SD卡,插入金龍107的開發板上,USB線連接在USB-2上,稍等片刻,則會識別出STM32的讀卡器,設備管理器里面如下圖所示。同時3.2寸LCD上也有對應的顯示,如下圖所示。
圖片2.png (30.56 KB, 下載次數: 0)
2015-4-28 14:39 上傳
圖片1.jpg (91.62 KB, 下載次數: 0)
2015-4-28 14:39 上傳
2015-4-28 14:44 上傳
點擊文件名下載附件
總結
以上是生活随笔為你收集整理的stm32f105vct6例程_STM32F107VCT6 107USB例程USB DEVICE例程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: w10安装ubuntu_Win10 +
- 下一篇: python docx 复制_99%的人