/*********************************************************************************************************
头文件
*********************************************************************************************************/
#include "stm32f10x.h"
#include "sdio_sdcard.h"
#include "usart.h"
#include "diskio.h"
#include "ff.h"
#include "delay.h"
#include "malloc.h"
#include <stdio.h>
/*********************************************************************************************************
变量定义
*********************************************************************************************************/
SD_Error Status = SD_OK;
u8 buff[256] = {"0123456789abcd"}; /*一个char 4个字节,一个字节1byte,0.5KB*/
/*********************************************************************************************************
** Function name: CardInfo
** Descriptions: 储存卡的相关信息
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
void CardInfo()
{
switch(SDCardInfo.CardType)
{
case SDIO_STD_CAPACITY_SD_CARD_V1_1:printf("Card Type:SDSC V1.1\r\n");break;
case SDIO_STD_CAPACITY_SD_CARD_V2_0:printf("Card Type:SDSC V2.0\r\n");break;
case SDIO_HIGH_CAPACITY_SD_CARD:printf("Card Type:SDHC V2.0\r\n");break;
case SDIO_MULTIMEDIA_CARD:printf("Card Type:MMC Card\r\n");break;
}
printf("Card ManufacturerID:%d\r\n",SDCardInfo.SD_cid.ManufacturerID); /*制造商ID*/
printf("Card RCA:%d\r\n",SDCardInfo.RCA); /*卡相对地址*/
printf("Card Capacity:%d MB\r\n",(u32)(SDCardInfo.CardCapacity>>20)); /*显示容量*/
printf("Card BlockSize:%d\r\n\r\n",SDCardInfo.CardBlockSize); /*显示块大小*/
}
/*********************************************************************************************************
** Function name: TestWriteRead
** Descriptions: 测试读和写
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
void TestWriteRead()
{
FRESULT res; /*Result code */
FATFS fatfs; /*File system object */
FIL fil; /*File object */
UINT br;
char diskname[20] = {"newdir"}; /*创建文件夹名字*/
disk_initialize(0); /*初始化磁盘*/
f_mount(0, &fatfs); /*为磁盘挂载一个空间*/
res = f_mkdir(diskname); /*创建一个新文件夹*/
/*打开一个文件并且以写得形式*/
res = f_open(&fil,"123.txt", FA_OPEN_EXISTING | FA_WRITE);
if(res==FR_OK)
printf("open file successfully.........\r\n");
else
printf("open file fail .........%d\r\n",res);
res = f_write(&fil, buff, sizeof(buff), &br);
/*写数据在文件*/
if(res == FR_OK)
printf("write data ok! %d\n\r",br);
else
printf("write data error : %d\n\r",res);
/*读数据在文件*/
res = f_open(&fil,"123.txt", FA_OPEN_EXISTING | FA_READ);
res = f_read(&fil, buff, sizeof(buff), &br);
if(res==FR_OK)
{
printf("read data num : %d\n\r",br);
printf("%s\n\r",buff);
}
else
printf("read data error : %d\n\r",res);
f_close(&fil);
f_mount(0, NULL);
}
/*********************************************************************************************************
** Function name: TestWriteRead
** Descriptions: 测试读和写
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
voidTestSpeed(void)
{
FRESULT res; /* Result code */
FIL fil; /* File object */
UINT br;
u8 i;
for(i=0;i<2000;i++)
{
f_lseek(&fil,f_size(&fil));
res = f_write(&fil, buff, sizeof(buff), &br);
if(res==FR_OK)
f_sync(&fil);
}
f_close(&fil);
f_mount(0, NULL);
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 主函数,指定函数执行
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
int main(void)
{
RCC_Configuration();
NVIC_Configuration();
uart_init(9600);
while (1)
;
}
/*********************************************************************************************************
** Function name: USART1_IRQHandler
** Descriptions: 串口一中断服务函数
** input parameters: none
** output parameters: none
** Returned value: none
*********************************************************************************************************/
void USART1_IRQHandler(void) /*中断服务标志,详情查DS*/
{
u8 dat;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) /*若接收数据寄存器满*/
{
dat = USART_ReceiveData(USART1);
if(dat == 0x63) /*如果接收到是0X63则处理函数,对应的相关操作*/
{
dat = 0;
if(((Status = SD_Init())== SD_OK))
{
CardInfo();
TestWriteRead(); /*串口1输出SD卡相关信息*/
} /*串口1输出SD相关读写操作*/
}
}
}
u8 buff[256] = {"0123456789abcd"}; /*一个char 1个字节,一个字节1byte,0.5KB*/ 这个数组不能超过512,否则就不能res = f_write(&fil, buff, sizeof(buff), &br);,为什么呀!
|