找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2301|回复: 0
打印 上一主题 下一主题
收起左侧

stm32f103驱动ch375b可读写优盘扇区,可测优盘容量,源程序测试通过

[复制链接]
跳转到指定楼层
楼主
ID:955625 发表于 2021-7-22 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验器材:
        MiniSTM32F103开发板V3版本
      
实验目的:
        STM32F103RC+CH375B模块读写优盘或SD卡,可实现单个扇区读写或多个连续扇区读写数据。
可获取磁盘容量
      
硬件资源:
        1,串口1(波特率:9600,PA9/PA10连接在板载USB转串口芯片CH340上面)
      
实验现象:
        如果读写的数据匹配,PD2上的LED点亮,否则LED不亮
        串口调试助手会打印各种初始化状态和读取到的数据
      
注意事项:
        有些优盘可能会初始化失败,建议先给单片机上电,再插入优盘。如果还不行,则复位单片机


要先上电,再插入优盘

STM32单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include  "ch375.h"
  5. #include  "led.h"



  6. #define ADDR 100//6600000//100         //要操作的U盘的扇区地址 物理扇区地址,用winhex打开物理磁盘可查看扇区地址数据

  7. u8 flag1=0;
  8. u8 Write_pbuf[512];   //数据缓冲区
  9. u8 Read_pbuf[2048];
  10. u8 status=0xff; //初始化状态标志

  11. //测试内容:在优盘或TF卡内ADDR地址开始,连续写4个扇区数据,再从ADDR处连续读4个扇区数据进行匹配,验证数据是否正确
  12. //可获取优盘或TF卡容量

  13. //注意:要先上电,再插入优盘
  14. int main(void)
  15. {
  16.         u16 i=0;         
  17.         delay_init();                     //延时函数初始化         
  18.         LED_Init();
  19.         
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  21.         uart_init(9600);         //串口初始化为9600        
  22.         printf("串口设置完毕\r\n");
  23.         delay_ms(100); //内部电源上电的复位时间最大为40ms,这里延时一段时间防止出现CH375初始化失败
  24.         CH375_GPIO_Init(); //初始化CH375B控制端口和数据端口 WR、RD、CS、A0、INT和P0~P7
  25.         CH375_WR_CMD(CMD_GET_IC_VER);  // 获取芯片及固件版本
  26.         status=CH375_RD_DAT();  // 版本
  27.         printf("芯片版本为:%#x\r\n",status);
  28.         status=CH375Init(); //初始化CH375芯片,成功返回0,失败返回1
  29.         printf("CH375芯片初始化值:%#x\r\n",status);
  30.         CH375_WR_CMD(CMD_DISK_MAX_LUN);  // 获取USB存储设备的最大逻辑单元号
  31.         status=CH375_RD_DAT();  // 最大逻辑单元号
  32.          printf("USB存储设备的最大逻辑单元号为:%#x\r\n",status);
  33.         //status=InitDisk();         //初始化U盘,初始化成功返回0,不成功返回错误代码 优盘要上电后重新插拔一次再复位才能成功。SD卡不用
  34.          //注意:要先上电,再插入优盘
  35.          status=CH375_InitDisk(); //成功 金士顿8G USB2.0优盘 东芝16G USB3.0优盘上电后插入初始化成功,,SD卡可不用插拔
  36.          printf("U盘初始化值:%#x\r\n",status);
  37.          status=Get_CH375DiskSize();//打印磁盘容量,单位MByte
  38.         for(i=0;i<512;i++)
  39.                 Write_pbuf[i]=i;//0x55;//           //向数据缓冲区中写入0~255 0~255,共512个字节
  40.         printf("向缓冲区中装入完毕\r\n");
  41.         //CH375WriteSector(ADDR+2,Write_pbuf);//将数据缓冲区中的512个字节的数据写入U盘的第ADDR扇区中 单个扇区写数据
  42.         CH375_WriteDisk(Write_pbuf,ADDR,4); //连续写多个扇区数据
  43.         printf("写 U盘扇区完毕\r\n");

  44.         for(i=0;i<2048;i++) //清空接收数据缓冲区
  45.         {
  46.                 Read_pbuf[i]=0;
  47.         }
  48.         printf("清空接收缓冲区完毕\r\n");
  49.         //CH375ReadSector(ADDR+1,Read_pbuf);//从U盘的第ADDR扇区中读取512个字节的数据到数据缓冲区    单个扇区读数据
  50.         CH375_ReadDisk(Read_pbuf,ADDR,4);  //连续读多个扇区数据
  51.         //查看读取到的几个扇区数据
  52.                 for(i=0;i<10;i++)
  53.         {
  54.                 printf("读取到的扇区数据为:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  55.         }
  56.         for(i=520;i<530;i++)
  57.         {
  58.                 printf("读取到的扇区数据为:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  59.         }
  60.                 for(i=1030;i<1040;i++)
  61.         {
  62.                 printf("读取到的扇区数据为:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  63.         }
  64.                         for(i=1600;i<1610;i++)
  65.         {
  66.                 printf("读取到的扇区数据为:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  67.         }
  68.         printf("读 U盘扇区完毕\r\n");

  69.         for(i=0;i<512;i++)
  70.         {
  71.                 if(Write_pbuf[i]!=Read_pbuf[i])  //对读出的数据进行匹配,如果不吻合则flag=1,否则flag=0
  72.                 {
  73.                         flag1=1;   //数据不吻合,flag1=1;
  74.                                 break;
  75.                 }
  76.         }
  77.         printf("匹配完毕\r\n");

  78.         for(i=0;i<512;i++) //清空发送数据缓冲区
  79.         {
  80.                 Write_pbuf[i]=0;
  81. //printf("扇区数据为:%#x\n",Write_pbuf[i]);         
  82.         }
  83.         
  84.         if(flag1)
  85.         {
  86.                 LED=1; //发光二极管灭
  87.                 printf("U盘扇区读写测试失败!\r\n"); //数据不吻合
  88.         }
  89.         else
  90.         {         
  91.                 LED=0; //发光二极管点亮
  92.                 printf("U盘扇区读写测试成功!\r\n"); //数据吻合
  93.         }
  94.         printf("------------------------------------\r\n");
  95. while(1){
  96.         }
  97. }
复制代码

所有资料51hei提供下载:
stm32f103驱动ch375b可读写优盘扇区,可测优盘容量,测试通过.7z (214.63 KB, 下载次数: 26)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表