找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1721|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32f103驅(qū)動(dòng)ch375b可讀寫(xiě)優(yōu)盤(pán)扇區(qū)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:154876 發(fā)表于 2022-11-13 15:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
  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盤(pán)的扇區(qū)地址 物理扇區(qū)地址,用winhex打開(kāi)物理磁盤(pán)可查看扇區(qū)地址數(shù)據(jù)

  7. u8 flag1=0;
  8. u8 Write_pbuf[512];   //數(shù)據(jù)緩沖區(qū)
  9. u8 Read_pbuf[2048];
  10. u8 status=0xff; //初始化狀態(tài)標(biāo)志

  11. //測(cè)試內(nèi)容:在優(yōu)盤(pán)或TF卡內(nèi)ADDR地址開(kāi)始,連續(xù)寫(xiě)4個(gè)扇區(qū)數(shù)據(jù),再?gòu)腁DDR處連續(xù)讀4個(gè)扇區(qū)數(shù)據(jù)進(jìn)行匹配,驗(yàn)證數(shù)據(jù)是否正確
  12. //可獲取優(yōu)盤(pán)或TF卡容量

  13. //注意:要先上電,再插入優(yōu)盤(pán)
  14. int main(void)
  15. {
  16.         u16 i=0;         
  17.         delay_init();                     //延時(shí)函數(shù)初始化          
  18.         LED_Init();
  19.        
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  21.         uart_init(9600);         //串口初始化為9600       
  22.         printf("串口設(shè)置完畢\r\n");
  23.         delay_ms(100); //內(nèi)部電源上電的復(fù)位時(shí)間最大為40ms,這里延時(shí)一段時(shí)間防止出現(xiàn)CH375初始化失敗
  24.         CH375_GPIO_Init(); //初始化CH375B控制端口和數(shù)據(jù)端口 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存儲(chǔ)設(shè)備的最大邏輯單元號(hào)
  31.         status=CH375_RD_DAT();  // 最大邏輯單元號(hào)
  32.          printf("USB存儲(chǔ)設(shè)備的最大邏輯單元號(hào)為:%#x\r\n",status);
  33.         //status=InitDisk();         //初始化U盤(pán),初始化成功返回0,不成功返回錯(cuò)誤代碼 優(yōu)盤(pán)要上電后重新插拔一次再?gòu)?fù)位才能成功。SD卡不用
  34.          //注意:要先上電,再插入優(yōu)盤(pán)
  35.          status=CH375_InitDisk(); //成功 金士頓8G USB2.0優(yōu)盤(pán) 東芝16G USB3.0優(yōu)盤(pán)上電后插入初始化成功,,SD卡可不用插拔
  36.          printf("U盤(pán)初始化值:%#x\r\n",status);
  37.          status=Get_CH375DiskSize();//打印磁盤(pán)容量,單位MByte
  38.         for(i=0;i<512;i++)
  39.                 Write_pbuf[i]=i;//0x55;//           //向數(shù)據(jù)緩沖區(qū)中寫(xiě)入0~255 0~255,共512個(gè)字節(jié)
  40.         printf("向緩沖區(qū)中裝入完畢\r\n");
  41.         //CH375WriteSector(ADDR+2,Write_pbuf);//將數(shù)據(jù)緩沖區(qū)中的512個(gè)字節(jié)的數(shù)據(jù)寫(xiě)入U(xiǎn)盤(pán)的第ADDR扇區(qū)中 單個(gè)扇區(qū)寫(xiě)數(shù)據(jù)
  42.         CH375_WriteDisk(Write_pbuf,ADDR,4); //連續(xù)寫(xiě)多個(gè)扇區(qū)數(shù)據(jù)
  43.         printf("寫(xiě) U盤(pán)扇區(qū)完畢\r\n");

  44.         for(i=0;i<2048;i++) //清空接收數(shù)據(jù)緩沖區(qū)
  45.         {
  46.                 Read_pbuf[i]=0;
  47.         }
  48.         printf("清空接收緩沖區(qū)完畢\r\n");
  49.         //CH375ReadSector(ADDR+1,Read_pbuf);//從U盤(pán)的第ADDR扇區(qū)中讀取512個(gè)字節(jié)的數(shù)據(jù)到數(shù)據(jù)緩沖區(qū)    單個(gè)扇區(qū)讀數(shù)據(jù)
  50.         CH375_ReadDisk(Read_pbuf,ADDR,4);  //連續(xù)讀多個(gè)扇區(qū)數(shù)據(jù)
  51.         //查看讀取到的幾個(gè)扇區(qū)數(shù)據(jù)
  52.                 for(i=0;i<10;i++)
  53.         {
  54.                 printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  55.         }
  56.         for(i=520;i<530;i++)
  57.         {
  58.                 printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  59.         }
  60.                 for(i=1030;i<1040;i++)
  61.         {
  62.                 printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  63.         }
  64.                         for(i=1600;i<1610;i++)
  65.         {
  66.                 printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d   Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
  67.         }
  68.         printf("讀 U盤(pán)扇區(qū)完畢\r\n");

  69.         for(i=0;i<512;i++)
  70.         {
  71.                 if(Write_pbuf[i]!=Read_pbuf[i])  //對(duì)讀出的數(shù)據(jù)進(jìn)行匹配,如果不吻合則flag=1,否則flag=0
  72.                 {
  73.                         flag1=1;   //數(shù)據(jù)不吻合,flag1=1;
  74.                                 break;
  75.                 }
  76.         }
  77.         printf("匹配完畢\r\n");

  78.         for(i=0;i<512;i++) //清空發(fā)送數(shù)據(jù)緩沖區(qū)
  79.         {
  80.                 Write_pbuf[i]=0;
  81. //printf("扇區(qū)數(shù)據(jù)為:%#x\n",Write_pbuf[i]);         
  82.         }
  83.        
  84.         if(flag1)
  85.         {
  86.                 LED=1; //發(fā)光二極管滅
  87.                 printf("U盤(pán)扇區(qū)讀寫(xiě)測(cè)試失!\r\n"); //數(shù)據(jù)不吻合
  88.         }
  89.         else
  90.         {         
  91.                 LED=0; //發(fā)光二極管點(diǎn)亮
  92.                 printf("U盤(pán)扇區(qū)讀寫(xiě)測(cè)試成功!\r\n"); //數(shù)據(jù)吻合
  93.         }
  94.         printf("------------------------------------\r\n");
  95. while(1){
  96.         }
  97. }
復(fù)制代碼

Keil代碼下載: Keil代碼.7z (216.18 KB, 下載次數(shù): 11)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表