#define FATFS_WR_SIZE 1024
#define FATFS_WR_CYCLE 8192
extern u32 wrtime; //1s计时单位
int main(void)
{
FIL* f_txt;
u8 key,res;
u16 i;
u8 *p;
u8 *pname; //带路径的文件名
u8 *wbuffer; //写入缓冲
u16 wt;
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,115200); //串口初始化为115200
delay_init(72); //延时初始化
usmart_dev.init(72); //初始化USMART
TIM6_Int_Init(10000,7199); //10Khz计数频率,1s中断一次
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化按键
LCD_Init(); //初始化LCD
W25QXX_Init(); //初始化W25Q128
my_mem_init(SRAMIN); //初始化内部内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
f_mount(fs[1],"1:",1); //挂载FLASH.
font_init();
while(SD_Init()) //检测不到SD卡
{
LCD_ShowString(30,150,200,16,16,"SD Card Error!");
delay_ms(500);
LCD_ShowString(30,150,200,16,16,"Please Check! ");
delay_ms(500);
LED0=!LED0; //DS0闪烁
}
p=mymalloc(SRAMIN,50);
pname=mymalloc(SRAMIN,30); //为带路径的文件名分配30个字节的内存
f_txt=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); //开辟FIL字节的内存区域
wbuffer=mymalloc(SRAMIN,FATFS_WR_SIZE); //申请写入大小
for(i=0;i<FATFS_WR_SIZE;i+=8)
{
wbuffer[i]='T';
wbuffer[i+1]='e';
wbuffer[i+2]='s';
wbuffer[i+3]='t';
wbuffer[i+4]='!';
wbuffer[i+5]='!';
wbuffer[i+6]='!';
wbuffer[i+7]=' ';
}
LCD_Clear(WHITE); //清屏
POINT_COLOR=RED; //设置字体为红色
Show_Str(30,50,200,16,"战舰STM32F103开发板",16,0);
Show_Str(30,70,200,16,"SDIO写入速度测试",16,0);
Show_Str(30,90,200,16,"KEY0:开始测试",16,0);
sprintf((char*)p,"文件大小:%dKB",FATFS_WR_CYCLE*FATFS_WR_SIZE/1024);
Show_Str(30,120,200,16,p,16,0);
POINT_COLOR=BLUE;
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)
{
Show_Str(30,140,200,16,"写入耗时: ",16,0);
Show_Str(30,160,200,16,"平均速度: ",16,0);
text_new_pathname(pname); //得到文件名
TIM6->CNT=0;
wrtime=0;
wt=0;
res=f_open(f_txt,(const TCHAR*)pname,FA_WRITE|FA_CREATE_NEW);//模式0,或者尝试打开
if(res==0)//打开成功.
{
for(i=0;i<FATFS_WR_CYCLE;i++)
{
res=f_write(f_txt,wbuffer,FATFS_WR_SIZE,&bw);//写入BMP首部
if(res)break;
if(wt!=wrtime)
{
wt=wrtime;
LCD_ShowNum(30+80,140,wt,3,16);
}
}
}
if(res==0)
{
wt=FATFS_WR_CYCLE*FATFS_WR_SIZE/1024/wrtime;
sprintf((char*)p,"平均速度:%dKB/s",wt);
Show_Str(30,160,200,16,p,16,0);
}else printf("失败");
f_close(f_txt);
}
delay_ms(10);
}
}