admin管理员组文章数量:1565361
前言
本文章使用STM32CubeMX将单片机变成一个小U盘
操作步骤
1.选择单片机型号
我使用的是STM32f103RCT6
2.设置外部高速时钟
3.设置Debug
4.配置USB
、
选择Mass Storage Class
5.配置时钟树
USB设备时钟设为48MHz
6.改变堆栈大小
把堆栈变大,否则无法启动
然后生成代码
7.代码修改
打开usbd_storage_if.c文件,修改
/**
* @}
*/
/** @defgroup USBD_STORAGE_Private_Defines
* @brief Private defines.
* @{
*/
#define STORAGE_LUN_NBR 1
#define STORAGE_BLK_NBR 60 //模拟60个扇区
#define STORAGE_BLK_SIZ 0x200
/* USER CODE BEGIN PRIVATE_DEFINES */
uint8_t msc_data[STORAGE_BLK_NBR][STORAGE_BLK_SIZ] = {0}; //总容量30kB
/* USER CODE END PRIVATE_DEFINES */
/**
* @}
*/
在begin6和begin7处修改代码
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 6 */
uint32_t n, i;
for (n = 0;n < blk_len;n++)
{
for (i = 0;i < STORAGE_BLK_SIZ;i++)
{
buf[n * STORAGE_BLK_SIZ + i] = msc_data[blk_addr + n][i];
}
}
return (USBD_OK);
/* USER CODE END 6 */
}
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 7 */
uint32_t n, i;
for (n = 0;n < blk_len;n++)
{
for (i = 0;i < STORAGE_BLK_SIZ;i++) {
msc_data[blk_addr + n][i] = buf[n * STORAGE_BLK_SIZ + i];
}
}
return (USBD_OK);
/* USER CODE END 7 */
}
然后编译烧录到单片机中
将单片机的usb端口插入电脑
会弹出提示
接着格式化
如果格式化成功会发现多了个盘符
在盘内新建txt文档写入内容并保存,如果可以成功保存说明迷你U盘制作成功
版权声明:本文标题:STM32——USB 内部FLASH模拟U盘 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726719050a1081723.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论