当前位置: 首页 > news >正文

内网进销存软件终身免费版/武汉seo排名公司

内网进销存软件终身免费版,武汉seo排名公司,做特卖的网站怎么赚钱,在线800客服系统前言 简简单单,将手中的单品集模拟成U盘,中间经历过很多坑,也算是摸索透了,记录一下开发,防止发生相同的问题。 正文 1.选择芯片 2.正常配置调试和外部时钟(sys->serial wirte, rcc->hse->crys…

前言

简简单单,将手中的单品集模拟成U盘,中间经历过很多坑,也算是摸索透了,记录一下开发,防止发生相同的问题。

正文

1.选择芯片

2.正常配置调试和外部时钟(sys->serial wirte,  rcc->hse->crystal)

3.打开usb

4.选择USB模式,packet = 1024,

5.配置时钟(打开USB会报错,关掉重新手动配置就好了)

6.生成工程

7.添加代码,只需要修改这一个文件就可以了,

8.参数含义

//这三个参数需要根据flash分配,整个flash除了程序外就是U盘大小

程序在0x08000000地址,但是存储不能从这个地址开始,需要后移0x5000(根据程序大小配置,不不能出现半个block的情况,整数就行了)

9.设置识别的参数,我重新定义了2个参数,也可以修改原来的大小。FLASH_PAGE_SIZE直接用就行

10.读取方法,这个让电脑可以读取U盘的相关信息,这个时候可以识别到U盘。用memcpy的方法,将目标内容复制到buf内

11.写入方法,网上都是直接使用memcpy复制的方法直接反向复制,但是我这会出现问题,在最后格式化U盘的时候会出现无法格式化U盘(怀疑是flash锁造成的);我这里使用对内部flash的读写的方法

12.直接编译,下载到STM内,如果识别不到则重新插入电脑。

13.格式化U盘,然后就可以正常使用

代码

直接全部复制过来,不想自己手动敲(累),就上面那几个地方,其他没变。

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : usbd_storage_if.c* @version        : v2.0_Cube* @brief          : Memory management layer.******************************************************************************* @attention** <h2><center>&copy; Copyright (c) 2025 STMicroelectronics.* All rights reserved.</center></h2>** This software component is licensed by ST under Ultimate Liberty license* SLA0044, the "License"; You may not use this file except in compliance with* the License. You may obtain a copy of the License at:*                             www.st.com/SLA0044********************************************************************************/
/* USER CODE END Header *//* Includes ------------------------------------------------------------------*/
#include "usbd_storage_if.h"/* USER CODE BEGIN INCLUDE *//* USER CODE END INCLUDE *//* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*//* USER CODE END PV *//** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY* @brief Usb device.* @{*//** @defgroup USBD_STORAGE* @brief Usb mass storage device module* @{*//** @defgroup USBD_STORAGE_Private_TypesDefinitions* @brief Private types.* @{*//* USER CODE BEGIN PRIVATE_TYPES *//* USER CODE END PRIVATE_TYPES *//*** @}*//** @defgroup USBD_STORAGE_Private_Defines* @brief Private defines.* @{*/#define STORAGE_LUN_NBR                  1
#define STORAGE_BLK_NBR                  0x10000
#define STORAGE_BLK_SIZ                  0x200/* USER CODE BEGIN PRIVATE_DEFINES */
#define  FLASH_START_ADDR                0x08005000
#define  FLASH_PAGE_NBR                  48/* USER CODE END PRIVATE_DEFINES *//*** @}*//** @defgroup USBD_STORAGE_Private_Macros* @brief Private macros.* @{*//* USER CODE BEGIN PRIVATE_MACRO *//* USER CODE END PRIVATE_MACRO *//*** @}*//** @defgroup USBD_STORAGE_Private_Variables* @brief Private variables.* @{*//* USER CODE BEGIN INQUIRY_DATA_FS */
/** USB Mass storage Standard Inquiry Data. */
const int8_t STORAGE_Inquirydata_FS[] = {/* 36 *//* LUN 0 */0x00,0x80,0x02,0x02,(STANDARD_INQUIRY_DATA_LEN - 5),0x00,0x00,0x00,'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product      : 16 Bytes */' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ','0', '.', '0' ,'1'                      /* Version      : 4 Bytes */
};
/* USER CODE END INQUIRY_DATA_FS *//* USER CODE BEGIN PRIVATE_VARIABLES *//* USER CODE END PRIVATE_VARIABLES *//*** @}*//** @defgroup USBD_STORAGE_Exported_Variables* @brief Public variables.* @{*/extern USBD_HandleTypeDef hUsbDeviceFS;/* USER CODE BEGIN EXPORTED_VARIABLES *//* USER CODE END EXPORTED_VARIABLES *//*** @}*//** @defgroup USBD_STORAGE_Private_FunctionPrototypes* @brief Private functions declaration.* @{*/static int8_t STORAGE_Init_FS(uint8_t lun);
static int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_size);
static int8_t STORAGE_IsReady_FS(uint8_t lun);
static int8_t STORAGE_IsWriteProtected_FS(uint8_t lun);
static int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
static int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
static int8_t STORAGE_GetMaxLun_FS(void);/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION *//* USER CODE END PRIVATE_FUNCTIONS_DECLARATION *//*** @}*/USBD_StorageTypeDef USBD_Storage_Interface_fops_FS =
{STORAGE_Init_FS,STORAGE_GetCapacity_FS,STORAGE_IsReady_FS,STORAGE_IsWriteProtected_FS,STORAGE_Read_FS,STORAGE_Write_FS,STORAGE_GetMaxLun_FS,(int8_t *)STORAGE_Inquirydata_FS
};/* Private functions ---------------------------------------------------------*/
/*** @brief  Initializes over USB FS IP* @param  lun:* @retval USBD_OK if all operations are OK else USBD_FAIL*/
int8_t STORAGE_Init_FS(uint8_t lun)
{/* USER CODE BEGIN 2 */return (USBD_OK);/* USER CODE END 2 */
}/*** @brief  .* @param  lun: .* @param  block_num: .* @param  block_size: .* @retval USBD_OK if all operations are OK else USBD_FAIL*/
int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_size)
{/* USER CODE BEGIN 3 */
//  *block_num  = STORAGE_BLK_NBR;
//  *block_size = STORAGE_BLK_SIZ;*block_num  = FLASH_PAGE_NBR;*block_size = FLASH_PAGE_SIZE;return (USBD_OK);/* USER CODE END 3 */
}/*** @brief  .* @param  lun: .* @retval USBD_OK if all operations are OK else USBD_FAIL*/
int8_t STORAGE_IsReady_FS(uint8_t lun)
{/* USER CODE BEGIN 4 */return (USBD_OK);/* USER CODE END 4 */
}/*** @brief  .* @param  lun: .* @retval USBD_OK if all operations are OK else USBD_FAIL*/
int8_t STORAGE_IsWriteProtected_FS(uint8_t lun)
{/* USER CODE BEGIN 5 */return (USBD_OK);/* USER CODE END 5 */
}/*** @brief  .* @param  lun: .* @retval USBD_OK if all operations are OK else USBD_FAIL*/
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{/* USER CODE BEGIN 6 */if(lun == 0){memcpy(buf,(uint8_t *)(FLASH_START_ADDR +blk_addr*FLASH_PAGE_SIZE),blk_len*FLASH_PAGE_SIZE);return (USBD_OK);}return (USBD_OK);/* USER CODE END 6 */
}/*** @brief  .* @param  lun: .* @retval USBD_OK if all operations are OK else USBD_FAIL*/
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{/* USER CODE BEGIN 7 */if(lun == 0){uint16_t i;HAL_FLASH_Unlock();FLASH_EraseInitTypeDef f;f.TypeErase = FLASH_TYPEERASE_PAGES;f.PageAddress = FLASH_START_ADDR + blk_addr*FLASH_PAGE_SIZE;f.NbPages = blk_len;uint32_t pageError = 0;HAL_FLASHEx_Erase(&f,&pageError);for(i=0;i<blk_len*FLASH_PAGE_SIZE;i+=4)HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,FLASH_START_ADDR+blk_addr*FLASH_PAGE_SIZE+i,*(uint32_t *)(&buf[i]));HAL_FLASH_Lock();return USBD_OK;}return (USBD_OK);/* USER CODE END 7 */
}/*** @brief  .* @param  None* @retval .*/
int8_t STORAGE_GetMaxLun_FS(void)
{/* USER CODE BEGIN 8 */return (STORAGE_LUN_NBR - 1);/* USER CODE END 8 */
}/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION *//* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION *//*** @}*//*** @}*//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

问题

1.插入识别U盘,但是打开或者读写文件异常慢:packet值不合理,导致变慢,可以修改成512 1024 4096尝试。正常就是page size

2.程序没反应,没有reset,或者重新插入。

3.格式化后出现无法格式化,或者等待好久没有反应,一直在转圈圈

这个是个大问题,卡了我好几天,主要是write方法有问题,像原来使用memcpy就会这样;

或者没有偏移地址,导致格式化的代码直接覆盖了U盘代码(我就是这个问题),U盘直接没了。

结尾

        这只是内部flash模拟U盘,可以添加fatfs文件系统模拟bootloader,进行程序拖拽跟新操作,不需要自己开发上位机,但是内存太小,不能存储大文件。

        可以考虑外接SPI FLASH,如果是2/8M的话,操作空间比较大,下次更新SPI FLASH的方法。

http://www.cadmedia.cn/news/558.html

相关文章:

  • 东莞响应式网站哪里好/广州seo黑帽培训
  • 合肥企业建站系统/北京网站优化指导
  • 做网站 先上线再调整/郑州网络营销公司哪个好
  • 长沙网站免费建站/手机搜索引擎排行榜
  • 光谷软件园网站建设/免费网站推广软件
  • 旅游去过的地方可做标识网站/重庆seo排名
  • 网站banner图尺寸是多少/合肥seo推广排名
  • 企业级网站开发与部署/深圳互联网公司50强
  • 网站专题制作原则/电子商务沙盘seo关键词
  • 信用网站建设成效/网络营销策划书包括哪些内容
  • 服装公司网站建设策划书/蜂蜜网络营销推广方案
  • 义乌网站/百度推广方案
  • 如何做淘宝代购网站/品牌推广营销
  • 还有那个网站可以做兼职呢/今日新闻最新头条10条
  • 海外网站建设/品牌推广思路
  • 铁道部建设司网站/网上推广赚钱项目
  • 网站建设功能描述/立即优化在哪里
  • 德阳高端网站建设/网站怎么优化搜索
  • 艺术留学机构/seo推广软件排行榜前十名
  • 深圳做手机商城网站/谷歌搜索引擎
  • wordpress站点迁移/排名检测
  • 织梦网站主页地址更改/搜索引擎营销的名词解释
  • 赌博网站做代理微信群卖房卡/美国婚恋网站排名
  • 乐清高端网站建设/重庆森林为什么不能看
  • 专业网站设计服务/网络营销推广方式都有哪些
  • 基于b s结构做的网站/广东省新闻
  • phpcms资讯类网站模板/北京口碑最好的it培训机构
  • 佛山网站建设有哪些/网络营销策划推广方案
  • 建站广告赚钱/seo优化网站词
  • 网站建设专业团队/磁力王