1、将usb U盘模式库文件添加到工程中

2、将usb_dev_msc例程中source目录下的文件复制到本项目source目录下,然后添加到工程中

3、添加相关引用

4、修改文件usb_dev_msc_msd.c

#define FLASH_SECTOR32_ADRR             (8*1024*40)

设置内部flash起始地址

根据要使用的flash空间大小设置容量

修改flash读写函数

int8_t msc_getcapacity(uint8_t lun, uint32_t *block_num, uint32_t *block_size)
{
    *block_size = 512u;
    *block_num  = 16u * 1024u * 8u / 512u;
    return Ok;
}

int8_t msc_read(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
    int8_t res = (int8_t)0;
    uint32_t cnt = 0;

USB_STATUS_REG |= (uint8_t)0X02;
    //W25QXX_Read(buf, blk_addr * 512u, blk_len * 512u);
    for(cnt = 0; cnt < blk_len*512/4;cnt ++)
    {
        *(uint32_t *)(buf+4*cnt)=*(uint32_t *)(FLASH_SECTOR32_ADRR+blk_addr*512+cnt*4);
        //memcpy((uint8_t *)(buf+512*cnt),(uint8_t *)(FLASH_SECTOR32_ADRR+blk_addr*8*1024+cnt*512),512);
    }
    //memcpy(buf,(uint8_t *)(FLASH_SECTOR32_ADRR+blk_addr*8*1024),blk_len*8*1024);
    return res;
    return res;
}

/**
 *******************************************************************************
 ** \brief  Write data to storage devices
 ** \param  lun: logic number
 ** \param  buf: data buffer be written
 ** \param  blk_addr: sector address
 ** \param  blk_len: sector count
 ** \retval status
 ******************************************************************************/
uint8_t buf_sector[8*1024];
void efm_blok_program(uint32_t addr,uint8_t *buf)
{
    uint32_t cnt;
    uint32_t sector_start_addr = (addr/(8*1024))*8*1024;
    memcpy(buf_sector,(uint8_t *)sector_start_addr,8*1024);
    memcpy((uint8_t *)(buf_sector+(addr%(8*1024))),buf,512);
    EFM_SectorErase(sector_start_addr);
    for(cnt = 0;cnt<8*1024/4;cnt ++)
    {
        EFM_SingleProgram((uint32_t)(sector_start_addr+cnt*4),*(uint32_t *)(buf_sector+cnt*4));
    }
}
int8_t msc_write(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
    int8_t res = (int8_t)0;
    uint32_t u32Addr;
    uint32_t cnt;
    USB_STATUS_REG |= (uint8_t)0X01;
    //W25QXX_Write(buf, blk_addr * 512u, blk_len * 512u);
    
    /* Unlock EFM. */
    EFM_Unlock();
    /* Enable flash. */
    EFM_FlashCmd(Enable);
    /* Wait flash ready. */
    while(Set != EFM_GetFlagStatus(EFM_FLAG_RDY))
    {
        ;
    }
    for(cnt=0;cnt <blk_len;cnt ++)
    {
        efm_blok_program(FLASH_SECTOR32_ADRR+(blk_addr+cnt)*512,(uint8_t *)(buf+cnt*512));
    }
    /* Lock EFM. */
    EFM_Lock();
    return res;
}

5、设置控制台启动U盘模式

#include "usb_dev_user.h"
#include "usb_dev_desc.h"
#include "usb_bsp.h"
#include "usb_dev_msc_class.h"
usb_core_instance usb_dev;
static rt_thread_t upan = RT_NULL;

static void usb_upan_entry(void *parameter)
{
    hd_usb_dev_init(&usb_dev, &user_desc, &usb_dev_msc_cbk, &user_cb);
    
    while(1){
        rt_thread_mdelay(1);
    }
}

void usb_thread_run(void)
{
    upan = rt_thread_create("usbpan",usb_upan_entry, RT_NULL,1024,3, 10);
   
    if (upan != RT_NULL)
        rt_thread_startup(upan);

}
static int upan_mode(int argc, char *argv[]){
    usb_thread_run();
    return 0;
}
MSH_CMD_EXPORT_ALIAS(upan_mode, upan_mode, run upan_mode);

6、在 配置文件中 rtconfig.h 打开宏定义 #define RT_USING_HEAP

修改宏定义#define RT_HEAP_SIZE 4096  增大堆空间

7、插上usb线,编译运行,电脑上会识别出U盘,格式化后即可以复制粘贴文件

HC32F460 实现模拟U盘导入python脚本在19264点阵屏上绘图--U盘模式相关推荐

  1. HC32F460 实现模拟U盘导入python脚本在19264点阵屏上绘图--RTthread移植

    一.项目简介 该项目涉及到的知识包括: 1.华大M4内核单片机HC32F460的使用 2.国产嵌入式系统RTThread的应用 3.超轻量级且超容易移植的嵌入式python脚本解释器pikascrip ...

  2. python访问文件下载地址_用Python脚本去获得skydrive上文件的真实地址链接 + 提供脚本下载v2012-01-18...

    之前得知微软提供的免费在线云存储空间Skydrive提供的空间大小达25GB的时候,就像其他人一样想到了可以用来存储音视频和图片,作为文件存储器,以便和别人分享文件.但是后来发现,skydrive中上 ...

  3. u盘耗电测试软件,如何在电脑上查看U盘的使用电量

    一般我们在使用U盘时都不会考虑到它的耗电量问题,但其实U盘插入到计算机的USB端口中后,主板需要对该端口进行持续供电,它才能正常工作!一旦你的计算机中同时插入几个USB接口的设备时,主板就可能无法为每 ...

  4. 使用Python脚本下载yandex云盘链接中的内容

    前言 在下载yandex disk云盘中其他人分享的一些内容时,正常情况下点击下载按钮即可.但是很多时候需要在没有图形界面的Linux机器上下载或者批量下载一批链接,这个时候需要使用脚本方式下载. 方 ...

  5. C语言调用Python脚本

    目录 一.头文件 二.使用步骤 1.初始化python模块 2.设置python的搜索路径 3.导入python脚本 4.导入调用的方法 5.构建参数 6.调用方法 7.解析返回值 8.释放资源 三. ...

  6. python flask 表单数据输出_将数据从HTML表单发送到Flask中的Python脚本

    我的Python脚本中有下面的代码: def cmd_wui(argv, path_to_tx): """Run a web UI.""" ...

  7. python脚本控制手机app_Python+Appium学习之启动手机APP或者浏览器

    一.启动浏览器: pycharm中python脚本如下: 1 from appium importwebdriver2 3 desired_caps ={4 'platformName':'Andro ...

  8. python打包脚本_py2exe打包python脚本

    在工作中遇到将python脚本转换成exe可执行程序的需求,通过查询可以使用py2exe来构建满足要求的程序,这里简要说明一下使用步骤. 一.py2exe是一个将python脚本转换成windows上 ...

  9. 在Spark Scala/Java应用中调用Python脚本,会么?

    摘要:本文将介绍如何在 Spark scala 程序中调用 Python 脚本,Spark java程序调用的过程也大体相同. 本文分享自华为云社区<[Spark]如何在Spark Scala/ ...

最新文章

  1. 《Python和Pygame游戏开发指南》——1.12 图书中的文本折行
  2. java实验1_Java程序实验1
  3. DataFrame纵向合并
  4. android王者调不了界面,王者荣耀登录界面怎么改?登录界面更改教程[多图]
  5. Leetcode PHP题解--D47 868. Binary Gap
  6. Python map 函数 -Python零基础入门教程
  7. Ubuntu14.04 下截图工具与设置快捷键
  8. shell - 查看天气
  9. 美国计算机科学奥林匹克竞赛试题,中学信息奥林匹克竞赛试题精选.doc
  10. Springboot自定义注解实现用户登录状态校验(一)
  11. oracle如何读取到从n行到m行的数据_关系型数据库进阶之查询优化
  12. 每日算法系列【LeetCode 470】用 Rand7() 实现 Rand10()
  13. 数据包在 Istio 网格中的生命周期
  14. 软件设计师-知识产权和标准化知识
  15. 如何使用 JavaScript 和 Canvas 创建星形图案
  16. mysql入门篇1———单表操作
  17. DOORS入门教程系列:基本概念介绍(一)
  18. buildroot制作树莓派CM3的系统
  19. java wtc_WTC的配置(二)
  20. 如何获得的office 365 年卡

热门文章

  1. ios-马甲包混淆方法
  2. 在超图中导入revit模型
  3. 【华为OD机试真题2023B卷 JAVAJS】跳房子II
  4. 机器学习入门编程环境配置
  5. Unity Shader - 后处理:油画效果
  6. 猪肉干烘干工艺,猪肉干的工艺步骤如下
  7. Java BigDecimal类的一般使用、BigDecimal转double
  8. DSP/BIOS入门
  9. python 抖音评论_新手python抖音无水印解析带详细注释
  10. 【PMP考试扫盲】超详细的PMP项目管理入门基础知识,考证必看