1. 程式人生 > >STM32f429開發中USB讀寫檔案涉及到的庫移植

STM32f429開發中USB讀寫檔案涉及到的庫移植

第一步 

USB_HID移植(原創http://blog.csdn.net/xbl1986/article/details/17577685#comments

├── STM32_USB_Device_Library                                 USB從裝置庫

│   │   ├── Class
│   │   │   └── hid

│   │   │       ├── inc
│   │   │       │   └── usbd_hid_core.h
│   │   │       └── src
│   │   │           └── usbd_hid_core.c
│   │   └── Core
│   │       ├── inc

│   │       │   ├── usbd_core.h
│   │       │   ├── usbd_def.h
│   │       │   ├── usbd_ioreq.h
│   │       │   ├── usbd_req.h
│   │       │   └── usbd_usr.h

│   │       └── src
│   │           ├── usbd_core.c
│   │           ├── usbd_ioreq.c
│   │           └── usbd_req.c
│   ├── STM32_USB_OTG_Driver                                 USB OTG 庫
│   │   ├── inc
│   │   │   ├── usb_bsp.h
│   │   │   ├── usb_core.h
│   │   │   ├── usb_dcd.h
│   │   │   ├── usb_dcd_int.h
│   │   │   ├── usb_defines.h
│   │   │   └── usb_regs.h
│   │   └── src
│   │       ├── usb_core.c
│   │       ├── usb_dcd.c

│   │       └── usb_dcd_int.c


從層級上分析,OTG是更加底層的,USBD的檔案依賴於USB的檔案,從對庫的使用來講,這些檔案我們都不需要改動。

 我們需要改動的有可能是下面的檔案

    ├── usb_bsp.c
    ├── usb_conf.h
    ├── usbd_conf.h
    ├── usbd_desc.c
    ├── usbd_desc.h
    └── usbd_usr.c

一些邏輯在main.c中操作,考慮如何發資料到主機端


對於一個工程來講

    ├── stm32f4xx_conf.h
    ├── stm32f4xx_it.c
    ├── stm32f4xx_it.h
    ├── system_stm32f4xx.c

這幾個檔案也是從庫裡提取出來的,有可能會改動的


STM32F4xx_StdPeriph_Driver 這部分的內容基本上從來沒有動過,是相當底層的驅動檔案了


│   ├── CMSIS
│   │   ├── Include
│   │   │   ├── core_cm4.h
│   │   │   ├── core_cm4_simd.h
│   │   │   ├── core_cmFunc.h
│   │   │   └── core_cmInstr.h
│   │   └── ST
│   │       └── STM32F4xx
│   │           ├── Include
│   │           │   ├── stm32f4xx.h
│   │           │   └── system_stm32f4xx.h
│   │           └── Source
│   │               └── Templates
│   │                   └── arm
│   │                       └── startup_stm32f4xx.s

這些檔案也是一般不會去動的,.s檔案的名字可能有些區別


下面給出一個修改過的main.c 內容很精簡了

[cpp]  view plain  copy
  1. /** 
  2.   ****************************************************************************** 
  3.   * @file    main.c  
  4.   * @author  MCD Application Team 
  5.   * @version V1.0.0 
  6.   * @date    19-September-2011 
  7.   * @brief   Main program body 
  8.   ****************************************************************************** 
  9.   * @attention 
  10.   * 
  11.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 
  12.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 
  13.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 
  14.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 
  15.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 
  16.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 
  17.   * 
  18.   * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> 
  19.   ****************************************************************************** 
  20.   */   
  21.   
  22. /* Includes ------------------------------------------------------------------*/  
  23. #include "main.h"  
  24. #include "usbd_hid_core.h"  
  25. #include "usbd_usr.h"  
  26. #include "usbd_desc.h"  
  27.   
  28. /** @addtogroup STM32F4-Discovery_Demo 
  29.   * @{ 
  30.   */  
  31.   
  32. /* Private typedef -----------------------------------------------------------*/  
  33. /* Private define ------------------------------------------------------------*/  
  34. /* Private macro -------------------------------------------------------------*/  
  35. /* Private variables ---------------------------------------------------------*/  
  36. #ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED  
  37.   #if defined ( __ICCARM__ ) /*!< IAR Compiler */  
  38.     #pragma data_alignment = 4     
  39.   #endif  
  40. #endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */  
  41. __ALIGN_BEGIN USB_OTG_CORE_HANDLE  USB_OTG_dev __ALIGN_END;  
  42. __IO uint32_t TimingDelay;  
  43. /* Private function prototypes -----------------------------------------------*/  
  44. static uint32_t Demo_USBConfig(void);  
  45. static void Demo_Exec(void);  
  46. /* Private functions ---------------------------------------------------------*/  
  47.   
  48. /** 
  49.   * @brief  Main program. 
  50.   * @param  None 
  51.   * @retval None 
  52.   */  
  53. int main(void)  
  54. {  
  55.   RCC_ClocksTypeDef RCC_Clocks;  
  56.   /* SysTick end of count event each 10ms */  
  57.   RCC_GetClocksFreq(&RCC_Clocks);  
  58.   SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);  
  59.   Demo_Exec();  
  60. }  
  61.   
  62. /** 
  63.   * @brief  Execute the demo application. 
  64.   * @param  None 
  65.   * @retval None 
  66.   */  
  67. static void Demo_Exec(void)  
  68. {  
  69.       uint8_t buf[4];  
  70.         buf[0]=0;  
  71.         buf[1]=7;  
  72.         buf[2]=7;  
  73.         buf[3]=0;  
  74.     /* USB configuration */  
  75.     Demo_USBConfig();  
  76.     while(1) {  
  77.         Delay(5);  
  78.         USBD_HID_SendReport (&USB_OTG_dev,   
  79.                                                  buf,  
  80.                                                  4);  
  81.     }  
  82. }  
  83.   
  84. /** 
  85.   * @brief  Initializes the USB for the demonstration application. 
  86.   * @param  None 
  87.   * @retval None 
  88.   */  
  89. static uint32_t Demo_USBConfig(void)  
  90. {  
  91.   USBD_Init(&USB_OTG_dev,  
  92.             USB_OTG_FS_CORE_ID,  
  93.             &USR_desc,   
  94.             &USBD_HID_cb,   
  95.             &USR_cb);  
  96.     
  97.   return 0;  
  98. }  
  99.   
  100. /** 
  101.   * @brief  Inserts a delay time. 
  102.   * @param  nTime: specifies the delay time length, in 10 ms. 
  103. 相關推薦

    STM32f429開發USB檔案涉及到的移植

    第一步  USB_HID移植(原創http://blog.csdn.net/xbl1986/article/details/17577685#comments) ├── STM32_USB_Device_Library        

    C# XML 檔案的方法(xmlreader,xmlwriter)

    class Test     {         public static void Main(string[] args)         {             string path = "d:\\books.xml";                         XmlReader read

    HDFS檔案涉及到的幾個思想

    HDFS讀寫檔案中涉及到的幾個思想 1.網路拓撲--節點距離計算 2.機架感知(副本節點選擇) 1.網路拓撲–節點距離計算 1.節點距離:兩個節點到達最近的共同祖先的距離總和。 2.圖解: 2.機架感知(副本節點選擇) 1.官方說明

    Python3.5開發3 - 基本命令及如何進行檔案

    Python3.5開發3 - 基本命令及如何進行讀寫檔案 知識點: 熟練使用Python的列表,元組,集合與字典 熟練使用Python讀寫檔案 演示: # list a = [1,'yx',['x','y'],6]

    Java專案檔案

    1.讀取檔案 InputStream input;//輸入流 InputStreamReader isr = null; BufferedReader br = null; //用於包裝InputStreamReader,提高處理效能。因為

    Java檔案,在檔案搜索內容,並輸出含有該內容的所有行

    1.問題描述 在一個目錄及子目錄下查詢 TXT或Java檔案,從中搜索所有“物件”字樣的行。 在D盤中的所有檔案中搜索含有“物件”的行。 2.解題思路 先找出D盤下所有檔案 再對每個檔案中的每行內容進行,進行查詢,若含有“物件”兩字,輸出該行。 3.程式程式碼 im

    hdfsnamenode及DataNode,源資料資訊,檔案的流程等

    客戶端呼叫create()來建立檔案 DistributedFileSystem用RPC呼叫元資料節點,在檔案系統的名稱空間中建立一個新的檔案。 元資料節點首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案。 DistributedFileSystem返回DFSOutputStream

    Hadoop程式執行 “沒有許可權檔案

    問題:在hdfs與本地檔案系統進行檔案讀寫的時候顯示許可權不夠 解決: 1、hdfs中的檔案許可權不夠        檢視hdfs檔案許可權,通過 hadoop fs -chmod 777 XXXX 進行許可權的修改 2、本地(Linux)檔案許可權不夠      

    Go實戰--golang檔案的幾種方式

    讀寫檔案應該是在開發過程中經常遇到的,今天要跟大家一起分享的就是在golang的世界中,如何讀寫檔案。 使用io/ioutil進行讀寫檔案 其中提到了兩個方法: func ReadFile func ReadFile(filename string) ([]by

    java的隨機檔案RandomAccessFile

    java中的隨機讀寫檔案: RandomAccessFile raf = new RandomAccessFile(“test.dat”,“rw”); 1.raf.write();這個方法是寫入檔案一個位元組    raf.read();這個方法是讀取檔案一個位

    c++使用fstream檔案

    c++中封裝的類庫ofsream,ifstream用於檔案的讀寫操作; (1)ofstream–用於從流中寫入檔案; //建立並寫入檔案,以寫檔案方式開啟檔案 ofstream TempOut("Test_327.txt"); int niNum = 100

    【Unity3D外掛】在Unity檔案資料:LitJSON快速教程

      介紹   JSON是一個簡單的,但功能強大的序列化資料格式。它定義了簡單的型別,如布林,數(int和float)和字串,和幾個資料結構:list和dictionnary。可以在http://JSON.org瞭解關於JSON的更多資訊。   litjson是用C #編寫的,它的目的是要小,快速,易用。它使

    文字模式檔案\r和\n的問題

    原文地址:http://blog.sina.com.cn/s/blog_65db99840100kidc.html DOS檔案(windows格式檔案)中,按一下ENTER就是輸入了\r\n,這就是回車換行 MAC檔案裡,用\r換行 UNIX檔案裡,用\n換行 自己嘗試了

    Python檔案IO操作(檔案、追加檔案

    【注】:下述操作過程是結合多種網路方法,然後自己實踐的結果。寫在這裡,主要目的是加深記憶,也希望能幫助後來者 Python中檔案的讀寫包含三個步驟:開啟檔案,讀/寫檔案,關閉檔案。 檔案開啟之後必

    apiCloud檔案的方法

        在apicloud中分別有api.readfile和api.writeFile兩個方法可以對檔案進行讀寫。 function Examination(){ //alert('ok');//讀取配置資訊並判斷api.readFile({path:'fs://confi

    從HDFS檔案系統檔案原理

    1、從HDFS檔案系統中寫檔案     1、客戶端發起請求要寫檔案 /aa/jdk.tgz      2、namenode會檢查該目錄是否存在,返回是否可寫      3、客戶端請求寫入第一個block      4、namenode返回3個datanode主機

    Python 檔案操作模式:open(path, '-模式-',encoding='UTF-8')

    open(path, ‘-模式-‘,encoding=’UTF-8’) 即open(路徑+檔名, 讀寫模式, 編碼) 在python對檔案進行讀寫操作的時候,常常涉及到“讀寫模式”,整理了一下常見的幾種模式,如下: 讀寫模式: r :只讀 r+ :

    nodeJS檔案方法的區別

    var fs = require('fs'); fs.open('./message.txt','r',function(err,fd){ var buf = new Buffer(225); //讀取fd檔案內容到buf快取區 fs.read(fd,buf,0,9,3,functio

    C++檔案儲存至容器list

    C++讀寫檔案及容器list基本操作       大家在開始入門C/C++時,都要練習個學生管理系統啥的,主要都為了進一步掌握所學知識,並能使用這些知識。其中這個小專案的重難點就在資料的操作了,其中如

    C#處理Ini檔案

    {    public string FileName; //INI檔名    //宣告讀寫INI檔案的API函式    [DllImport("kernel32")]    private static extern bool WritePrivateProfileString(string section