你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2890|回复: 3

【HAL库每天一例】第060例: USB-串行Flash模拟U盘

[复制链接]

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
发表于 2016-7-4 10:16:21 | 显示全部楼层 |阅读模式
本帖最后由 haohao663 于 2016-7-4 10:17 编辑

【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:https://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-060. USB-串行Flash模拟U盘


/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-060. USB-串行Flash模拟U盘
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  STM32F103ZET6内部集成USB控制器,在无需外接芯片可以做为USB从设备。
  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  JP3        PB0           LED1               已接入
  
【3】操作及现象
  使用开发板配套USB线连接到开发板标示“USB协议”字样的MIMI USB接口,打开开发板电源
开关。下载完程序之后,在电脑端会发现“可移动硬盘”并自动安装驱动,然后在“我的电脑”中
就可以发现串行Flash设备,效果与读卡器相同。正常运行后开发板LED1灯不断闪烁。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/

usbd_msc_storage.c文件内容
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "usbd_msc_storage.h"
  3. /* USER CODE BEGIN INCLUDE */
  4. #include "spiflash/bsp_spiflash.h"
  5. /* USER CODE END INCLUDE */

  6. /** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
  7.   * @{
  8.   */

  9. /** @defgroup USBD_STORAGE
  10.   * [url=home.php?mod=space&uid=247401]@brief[/url] usbd core module
  11.   * @{
  12.   */

  13. /** @defgroup USBD_STORAGE_Private_TypesDefinitions
  14.   * @{
  15.   */
  16. /* USER CODE BEGIN PRIVATE_TYPES */
  17. /* USER CODE END PRIVATE_TYPES */
  18. /**
  19.   * @}
  20.   */

  21. /** @defgroup USBD_STORAGE_Private_Defines
  22.   * @{
  23.   */
  24. #define SPI_FLASH_SECTOR_SIZE    4096    // 串行Flash扇区大小
  25. #define SPI_FLASH_START_SECTOR   1792    // 串行Flash文件系统FatFS偏移量
  26. #define SPI_FLASH_SECTOR_COUNT   2304    // 串行Flash文件系统FatFS占用扇区个数  

  27. #define STORAGE_LUN_NBR          1  
  28. #define STORAGE_BLK_SIZ          SPI_FLASH_SECTOR_SIZE

  29. /* USER CODE BEGIN PRIVATE_DEFINES */
  30. /* USER CODE END PRIVATE_DEFINES */
  31.   
  32. /**
  33.   * @}
  34.   */

  35. /** @defgroup USBD_STORAGE_Private_Macros
  36.   * @{
  37.   */
  38. /* USER CODE BEGIN PRIVATE_MACRO */
  39. /* USER CODE END PRIVATE_MACRO */

  40. /**
  41.   * @}
  42.   */

  43. /** @defgroup USBD_STORAGE_IF_Private_Variables
  44.   * @{
  45.   */
  46. /* USB handler declaration */
  47. /* Handle for USB Full Speed IP */
  48.   USBD_HandleTypeDef  *hUsbDevice_0;
  49. /* USER CODE BEGIN INQUIRY_DATA_FS */
  50. /* USB Mass storage Standard Inquiry Data */
  51. const int8_t  STORAGE_Inquirydata_FS[] = {//36
  52.   
  53.   /* LUN 0 */
  54.   0x00,               
  55.   0x80,               
  56.   0x02,               
  57.   0x02,
  58.   (STANDARD_INQUIRY_DATA_LEN - 5),
  59.   0x00,
  60.   0x00,        
  61.   0x00,
  62.   'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */
  63.   'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product      : 16 Bytes */
  64.   ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  65.   '0', '.', '0' ,'1',                     /* Version      : 4 Bytes */
  66. };
  67. /* USER CODE END INQUIRY_DATA_FS */

  68. /* USER CODE BEGIN PRIVATE_VARIABLES */
  69. /* USER CODE END PRIVATE_VARIABLES */

  70. /**
  71.   * @}
  72.   */

  73. /** @defgroup USBD_STORAGE_IF_Exported_Variables
  74.   * @{
  75.   */
  76.   extern USBD_HandleTypeDef hUsbDeviceFS;
  77. /* USER CODE BEGIN EXPORTED_VARIABLES */
  78. /* USER CODE END EXPORTED_VARIABLES */

  79. /**
  80.   * @}
  81.   */
  82.   
  83. /** @defgroup USBD_STORAGE_Private_FunctionPrototypes
  84.   * @{
  85.   */
  86. static int8_t STORAGE_Init_FS (uint8_t lun);
  87. static int8_t STORAGE_GetCapacity_FS (uint8_t lun, uint32_t *block_num, uint16_t *block_size);
  88. static int8_t STORAGE_IsReady_FS (uint8_t lun);
  89. static int8_t STORAGE_IsWriteProtected_FS (uint8_t lun);
  90. static int8_t STORAGE_Read_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr,uint16_t blk_len);
  91. static int8_t STORAGE_Write_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr,uint16_t blk_len);
  92. static int8_t STORAGE_GetMaxLun_FS (void);

  93. /* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */
  94. /* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */

  95. /**
  96.   * @}
  97.   */
  98.   
  99. USBD_StorageTypeDef USBD_Storage_Interface_fops_FS =
  100. {
  101.   STORAGE_Init_FS,
  102.   STORAGE_GetCapacity_FS,
  103.   STORAGE_IsReady_FS,
  104.   STORAGE_IsWriteProtected_FS,
  105.   STORAGE_Read_FS,
  106.   STORAGE_Write_FS,
  107.   STORAGE_GetMaxLun_FS,
  108.   (int8_t *)STORAGE_Inquirydata_FS,
  109. };

  110. /* Private functions ---------------------------------------------------------*/
  111. /*******************************************************************************
  112. * Function Name  : STORAGE_Init_FS
  113. * Description    :
  114. * Input          : None.
  115. * Output         : None.
  116. * Return         : None.
  117. *******************************************************************************/
  118. int8_t STORAGE_Init_FS (uint8_t lun)
  119. {
  120.   /* USER CODE BEGIN 2 */
  121.   int8_t res=-1;
  122.   MX_SPIFlash_Init();
  123.     if(SPI_FLASH_ReadID()==SPI_FLASH_ID)
  124.   {
  125.     res=USBD_OK;
  126.   }
  127.   return res;
  128.   /* USER CODE END 2 */
  129. }

  130. /*******************************************************************************
  131. * Function Name  : STORAGE_GetCapacity_FS
  132. * Description    :
  133. * Input          : None.
  134. * Output         : None.
  135. * Return         : None.
  136. *******************************************************************************/
  137. int8_t STORAGE_GetCapacity_FS (uint8_t lun, uint32_t *block_num, uint16_t *block_size)
  138. {
  139.   /* USER CODE BEGIN 3 */  
  140.   *block_num  = SPI_FLASH_SECTOR_COUNT;
  141.   *block_size = STORAGE_BLK_SIZ;
  142.   return (USBD_OK);
  143.   /* USER CODE END 3 */
  144. }

  145. /*******************************************************************************
  146. * Function Name  : STORAGE_IsReady_FS
  147. * Description    :
  148. * Input          : None.
  149. * Output         : None.
  150. * Return         : None.
  151. *******************************************************************************/
  152. int8_t  STORAGE_IsReady_FS (uint8_t lun)
  153. {
  154.   /* USER CODE BEGIN 4 */
  155.   if(SPI_FLASH_ReadID()==SPI_FLASH_ID)
  156.     return (USBD_OK);
  157.   else
  158.     return -1;
  159.   /* USER CODE END 4 */
  160. }

  161. /*******************************************************************************
  162. * Function Name  : STORAGE_IsWriteProtected_FS
  163. * Description    :
  164. * Input          : None.
  165. * Output         : None.
  166. * Return         : None.
  167. *******************************************************************************/
  168. int8_t  STORAGE_IsWriteProtected_FS (uint8_t lun)
  169. {
  170.   /* USER CODE BEGIN 5 */
  171.   return (USBD_OK);
  172.   /* USER CODE END 5 */
  173. }

  174. /*******************************************************************************
  175. * Function Name  : STORAGE_Read_FS
  176. * Description    :
  177. * Input          : None.
  178. * Output         : None.
  179. * Return         : None.
  180. *******************************************************************************/
  181. int8_t STORAGE_Read_FS (uint8_t lun,
  182.                         uint8_t *buf,
  183.                         uint32_t blk_addr,                       
  184.                         uint16_t blk_len)
  185. {
  186.   /* USER CODE BEGIN 6 */
  187.   blk_addr+=SPI_FLASH_START_SECTOR;      
  188.   SPI_FLASH_BufferRead(buf, blk_addr*SPI_FLASH_SECTOR_SIZE, blk_len*SPI_FLASH_SECTOR_SIZE);
  189.   return (USBD_OK);
  190.   /* USER CODE END 6 */
  191. }

  192. /*******************************************************************************
  193. * Function Name  : STORAGE_Write_FS
  194. * Description    :
  195. * Input          : None.
  196. * Output         : None.
  197. * Return         : None.
  198. *******************************************************************************/
  199. int8_t STORAGE_Write_FS (uint8_t lun,
  200.                          uint8_t *buf,
  201.                          uint32_t blk_addr,
  202.                          uint16_t blk_len)
  203. {
  204.   /* USER CODE BEGIN 7 */
  205.   uint32_t write_addr;
  206.   /* 扇区偏移7MB,外部Flash文件系统空间放在SPI Flash后面9MB空间 */
  207.   blk_addr+=SPI_FLASH_START_SECTOR;
  208.   write_addr = blk_addr*SPI_FLASH_SECTOR_SIZE;   
  209.   SPI_FLASH_SectorErase(write_addr);
  210.   SPI_FLASH_BufferWrite(buf,write_addr,blk_len*SPI_FLASH_SECTOR_SIZE);
  211.   return USBD_OK;
  212.   /* USER CODE END 7 */
  213. }

  214. /*******************************************************************************
  215. * Function Name  : STORAGE_GetMaxLun_FS
  216. * Description    :
  217. * Input          : None.
  218. * Output         : None.
  219. * Return         : None.
  220. *******************************************************************************/
  221. int8_t STORAGE_GetMaxLun_FS (void)
  222. {
  223.   /* USER CODE BEGIN 8 */
  224.   return (STORAGE_LUN_NBR - 1);
  225.   /* USER CODE END 8 */
  226. }

  227. /* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
  228. /* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */

  229. /**
  230.   * @}
  231.   */

  232. /**
  233.   * @}
  234.   */  
  235. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码


回复

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2018-8-3
发表于 2018-7-29 14:18:22 | 显示全部楼层
楼主连接失效了。能不能给个下载连接?
回复 支持 反对

使用道具 举报

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
 楼主| 发表于 2018-7-31 08:48:03 | 显示全部楼层
孰悉哋氣息 发表于 2018-7-29 14:18
楼主连接失效了。能不能给个下载连接?

硬石开源资料下载链接(该帖总是最新资料)
http://www.ing10bbs.com/forum.ph ... =1458&fromuid=4
(出处: 硬石社区)
回复 支持 反对

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2018-8-3
发表于 2018-8-1 18:06:51 | 显示全部楼层
haohao663 发表于 2018-7-31 08:48
硬石开源资料下载链接(该帖总是最新资料)
http://www.ing10bbs.com/forum.php?mod=viewthread&tid=1458&f ...

好的,谢谢.
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版