#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "key.h" #include "ltdc.h" #include "lcd.h" #include "sdram.h" #include "usmart.h" #include "pcf8574.h" #include "mpu.h" #include "malloc.h" #include "w25qxx.h" #include "sdmmc_sdcard.h" //ALIENTEK 北极星STM32H750/F750开发板 实验41 //SD卡 实验 //技术支持:www.openedv.com //广州市星翼电子科技有限公司 //通过串口打印SD卡相关信息 void show_sdcard_info(void) { switch(SDCardInfo.CardType) { case STD_CAPACITY_SD_CARD_V1_1:printf("Card Type:SDSC V1.1\r\n");break; case STD_CAPACITY_SD_CARD_V2_0:printf("Card Type:SDSC V2.0\r\n");break; case HIGH_CAPACITY_SD_CARD:printf("Card Type:SDHC V2.0\r\n");break; case 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); //显示块大小 } //测试SD卡的读取 //从secaddr地址开始,读取seccnt个扇区的数据 //secaddr:扇区地址 //seccnt:扇区数 void sd_test_read(u32 secaddr,u32 seccnt) { u32 i; u8 *buf; u8 sta=0; buf=mymalloc(SRAMEX,seccnt*512); //申请内存,从SDRAM申请内存 sta=SD_ReadDisk(buf,secaddr,seccnt);//读取secaddr扇区开始的内容 if(sta==0) { printf("SECTOR %d DATA:\r\n",secaddr); for(i=0;i>20,5,16);//显示SD卡容量 while(1) { key=KEY_Scan(0); if(key==KEY0_PRES)//KEY0按下了 { buf=mymalloc(0,512); //申请内存 key=SD_ReadDisk(buf,0,1); if(key==0) //读取0扇区的内容 { LCD_ShowString(30,190,200,16,16,"USART1 Sending Data..."); printf("SECTOR 0 DATA:\r\n"); for(sd_size=0;sd_size<512;sd_size++)printf("%x ",buf[sd_size]);//打印0扇区数据 printf("\r\nDATA ENDED\r\n"); LCD_ShowString(30,190,200,16,16,"USART1 Send Data Over!"); }else printf("err:%d\r\n",key); myfree(0,buf);//释放内存 } t++; delay_ms(10); if(t==20) { LED0_Toggle;//DS0闪烁 t=0; } } }