娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月04日(星期三)

2018年06月04日 | STM32f429開發(fā)中USB讀寫文件涉及到的庫移植

發(fā)布者:chinalisa 來源: eefocus關(guān)鍵字:STM32f429  USB  讀寫文件  庫移植 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

第一步 

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


├── STM32_USB_Device_Library                                 USB從設(shè)備庫

│   │   ├── 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的文件,從對庫的使用來講,這些文件我們都不需要改動(dòng)。

 我們需要改動(dòng)的有可能是下面的文件

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

一些邏輯在main.c中操作,考慮如何發(fā)數(shù)據(jù)到主機(jī)端


對于一個(gè)工程來講

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

這幾個(gè)文件也是從庫里提取出來的,有可能會(huì)改動(dòng)的


STM32F4xx_StdPeriph_Driver 這部分的內(nèi)容基本上從來沒有動(dòng)過,是相當(dāng)?shù)讓拥尿?qū)動(dòng)文件了


│   ├── 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

這些文件也是一般不會(huì)去動(dòng)的,.s文件的名字可能有些區(qū)別


下面給出一個(gè)修改過的main.c 內(nèi)容很精簡了

/** 

  ****************************************************************************** 

  * @file    main.c  

  * @author  MCD Application Team 

  * @version V1.0.0 

  * @date    19-September-2011 

  * @brief   Main program body 

  ****************************************************************************** 

  * @attention 

  * 

  * 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. 

  * 

  *

? COPYRIGHT 2011 STMicroelectronics

 

  ****************************************************************************** 

  */   

  

/* Includes ------------------------------------------------------------------*/  

#include "main.h"  

#include "usbd_hid_core.h"  

#include "usbd_usr.h"  

#include "usbd_desc.h"  

  

/** @addtogroup STM32F4-Discovery_Demo 

  * @{ 

  */  

  

/* Private typedef -----------------------------------------------------------*/  

/* Private define ------------------------------------------------------------*/  

/* Private macro -------------------------------------------------------------*/  

/* Private variables ---------------------------------------------------------*/  

#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED  

  #if defined ( __ICCARM__ ) /*!< IAR Compiler */  

    #pragma data_alignment = 4     

  #endif  

#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */  

__ALIGN_BEGIN USB_OTG_CORE_HANDLE  USB_OTG_dev __ALIGN_END;  

__IO uint32_t TimingDelay;  

/* Private function prototypes -----------------------------------------------*/  

static uint32_t Demo_USBConfig(void);  

static void Demo_Exec(void);  

/* Private functions ---------------------------------------------------------*/  

  

/** 

  * @brief  Main program. 

  * @param  None 

  * @retval None 

  */  

int main(void)  

{  

  RCC_ClocksTypeDef RCC_Clocks;  

  /* SysTick end of count event each 10ms */  

  RCC_GetClocksFreq(&RCC_Clocks);  

  SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);  

  Demo_Exec();  

}  

  

/** 

  * @brief  Execute the demo application. 

  * @param  None 

  * @retval None 

  */  

static void Demo_Exec(void)  

{  

      uint8_t buf[4];  

        buf[0]=0;  

        buf[1]=7;  

        buf[2]=7;  

        buf[3]=0;  

    /* USB configuration */  

    Demo_USBConfig();  

    while(1) {  

        Delay(5);  

        USBD_HID_SendReport (&USB_OTG_dev,   

                                                 buf,  

                                                 4);  

    }  

}  

  

/** 

  * @brief  Initializes the USB for the demonstration application. 

  * @param  None 

  * @retval None 

  */  

static uint32_t Demo_USBConfig(void)  

{  

  USBD_Init(&USB_OTG_dev,  

            USB_OTG_FS_CORE_ID,  

            &USR_desc,   

            &USBD_HID_cb,   

            &USR_cb);  

    

  return 0;  

}  

  

/** 

  * @brief  Inserts a delay time. 

  * @param  nTime: specifies the delay time length, in 10 ms. 

  * @retval None 

  */  

void Delay(__IO uint32_t nTime)  

{  

  TimingDelay = nTime;  

  

  while(TimingDelay != 0);  

}  

  

/** 

  * @brief  Decrements the TimingDelay variable. 

  * @param  None 

  * @retval None 

  */  

void TimingDelay_Decrement(void)  

{  

  if (TimingDelay != 0x00)  

  {   

    TimingDelay--;  

  }  

}  

  

/** 

  * @brief  This function handles the test program fail. 

  * @param  None 

  * @retval None 

  */  

void Fail_Handler(void)  

{  

  while(1)  

  {  

    Delay(5);  

  }  

}  

  

#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  

  

/** 

  * @} 

  */  

  

  

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/  

第二步

移植并修改底層文件


先上個(gè)移植完的工程下載地址:

http://download.csdn.net/detail/u013352158/8212365


剛開始打算在discovery板子上移植USB官方庫時(shí)候是想用全速模式的,折騰了半天沒反應(yīng),后來看原理圖時(shí)發(fā)現(xiàn)全速模式的兩引腳接到仿真器上去了,沒辦法只能采用在高速口下配置成全速模式的方法,不過移植起來也算方便,總的來說就三點(diǎn)吧:時(shí)鐘,IO最后就是把該刪的都刪了。

文件結(jié)構(gòu)可以看下面這一篇文章,講的很清楚了,畢竟f4和f1系列USB庫差別挺大的,一開始可能無從下手

http://blog.csdn.net/xbl1986/article/details/17577685#comments


首先是預(yù)編譯指令,有4個(gè):USE_STDPERIPH_DRIVER,STM32F4XX,USE_USB_OTG_HS,USE_EMBEDDED_PHY,前三個(gè)不說了應(yīng)該都看的懂,第四個(gè)有兩個(gè)指令可以選擇,USE_ULPI_PHY是正常的高速模式,stm32要使用高速模式必須外擴(kuò)個(gè)USB3300芯片作為高速USB的物理層,這里我們使用片上內(nèi)置的物理層,所以用的是USE_EMBEDDED_PHY,在高速口下配置成全速模式。

接著是時(shí)鐘,USB時(shí)鐘必須為48M,不同板子外接的晶振不一樣,官方庫里用的是25M的外部晶振,而我們的discovery板子上用的是8M的晶振,需要去system_stm32f4xx.c文件里改下分頻系數(shù),下面就是配置成168M主頻48M的USB時(shí)鐘

/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */  

#define PLL_M      8  

#define PLL_N      336  

  

/* SYSCLK = PLL_VCO / PLL_P */  

#define PLL_P      2  

  

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */  

#define PLL_Q      7  

之后去app.c里找主函數(shù),主函數(shù)很簡單,只調(diào)用了一個(gè)USBD_Init()初始化函數(shù),跟著這個(gè)函數(shù)去usb_bsp.c文件里把底層IO配置改下,說白了就是配置下DM,DP,VBUS三個(gè)引腳,順便把USB和GPIOB外設(shè)時(shí)鐘打開。

[cpp] view plain copy

void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)  

{  

  GPIO_InitTypeDef GPIO_InitStructure;      

    

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE) ;  

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS, ENABLE) ;  

    

  GPIO_InitStructure.GPIO_Pin = //GPIO_Pin_12 | //ID  

                                GPIO_Pin_14 | //DM  

                                GPIO_Pin_15;  //DP  

    

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;   

  GPIO_Init(GPIOB, &GPIO_InitStructure);    

    

//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_OTG_HS_FS) ;   

  GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG_HS_FS) ;   

  GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG_HS_FS) ;  

    

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;  

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;  

  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;  

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  

  GPIO_Init(GPIOB, &GPIO_InitStructure);    

}  


到這里就接近尾聲了,編譯一下開始刪吧,中斷文件里幾個(gè)外部中斷和喚醒中斷都可以刪了,usbd_usr.c里各種函數(shù)內(nèi)容都刪了吧,留著個(gè)接口當(dāng)備胎以后再說,刪的沒錯(cuò)誤了之后把usb_conf.h里下面兩條注釋掉就算完成了。

// #define USB_OTG_HS_DEDICATED_EP1_ENABLED

// #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT


最后貼個(gè)usb的軟斷開代碼,以后應(yīng)該會(huì)用到的吧:


USB_OTG_DCTL_TypeDef   dctl;  

   /*軟斷開*/  

dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL);  

dctl.b.sftdiscon = 1;         //0:正常工作;1:軟斷開  

USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, dctl.d32); 


關(guān)鍵字:STM32f429  USB  讀寫文件  庫移植 引用地址:STM32f429開發(fā)中USB讀寫文件涉及到的庫移植

上一篇:基于STM32F429的SDRAM使用
下一篇:STM32F429 CAN2通信

推薦閱讀

打開手機(jī),輸入GPS參數(shù),輕輕一點(diǎn),無人旱耕機(jī)、無人打漿整平機(jī)、無人插秧機(jī)、無人施藥施肥機(jī)、無人割草機(jī)等紛紛開進(jìn)農(nóng)田。3日,“我國首輪農(nóng)業(yè)全過程無人作業(yè)試驗(yàn)項(xiàng)目”在國家糧食生產(chǎn)功能示范區(qū)江蘇興化正式啟動(dòng),無人農(nóng)機(jī)即可完成所有田間耕作成為現(xiàn)實(shí)。本次無人作業(yè)試驗(yàn)融合了北斗導(dǎo)航系統(tǒng)、智能方向系統(tǒng)、智能動(dòng)力系統(tǒng)等智能汽車、車聯(lián)網(wǎng)和無人戰(zhàn)術(shù)平...
CeraLink作為TDK的愛普科斯的一款高顏值的產(chǎn)品,在過去一兩年中我們已經(jīng)多次向大家介紹過,今天小編有意系統(tǒng)的為大家梳理一下CereLink這款產(chǎn)品的特性和應(yīng)用。CeraLink是一種用于直流支撐電路穩(wěn)壓的緊湊型電容器,可用作吸收電容器或直流支撐電容器。它采用PLZT陶瓷作為基材,并針對快速開關(guān)轉(zhuǎn)換器、空間非常狹小的轉(zhuǎn)換器、以及需要承受高溫使用環(huán)境的轉(zhuǎn)換...
小米去年發(fā)布的MIX Alpha讓很多人印象深刻,于是就有傳聞稱MIX Alpha將推出新版本,而且會(huì)搭載高通驍龍865芯片,對此小米市場部副總經(jīng)理臧智淵表示否認(rèn)。我們來了解一下小米MIX Alpha的情況:據(jù)悉,小米MIX Alpha 環(huán)繞屏概念手機(jī)搭載環(huán)繞屏,配備一整塊完整的屏幕環(huán)繞機(jī)身,屏占比180.6%。手機(jī)下巴和額頭部分寬度僅2.15毫米,聽筒、前置相機(jī)、側(cè)邊按...
【2021年6月4日,德國慕尼黑訊】如今的先進(jìn)駕駛輔助系統(tǒng)(ADAS)是基于攝像頭、雷達(dá)或激光雷達(dá),只能識(shí)別位于視線范圍之內(nèi)的目標(biāo)物體。但對于被聽到的時(shí)間比被看到的時(shí)間早得多,因而在很長時(shí)間內(nèi)無法被ADAS識(shí)別的應(yīng)急車輛,該系統(tǒng)就暴露出它的弱點(diǎn)。為應(yīng)對這一挑戰(zhàn),英飛凌科技股份公司 ,攜手Reality AI打造出一套能讓車輛擁有聽覺能力的先進(jìn)傳感解決...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 监利县| 邢台县| 女性| 涟水县| 绥江县| 大冶市| 文昌市| 陇川县| 凤山市| 高碑店市| 子洲县| 吐鲁番市| 抚宁县| 栾城县| 黎城县| 马公市| 绿春县| 曲阜市| 遂溪县| 威海市| 明溪县| 江源县| 滦南县| 蓬溪县| 公安县| 石楼县| 龙陵县| 长泰县| 苏尼特左旗| 二连浩特市| 山阳县| 济源市| 靖江市| 英吉沙县| 邵阳市| 灵璧县| 扎鲁特旗| 云林县| 开封县| 顺义区| 桃园县|