栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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;
}


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);
    
   
    EFM_Unlock();
   
    EFM_FlashCmd(Enable);
   
    while(Set != EFM_GetFlagStatus(EFM_FLAG_RDY))
    {
        ;
    }
    for(cnt=0;cnt     {
        efm_blok_program(FLASH_SECTOR32_ADRR+(blk_addr+cnt)*512,(uint8_t *)(buf+cnt*512));
    }
   
    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盘,格式化后即可以复制粘贴文件

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号