关于SD卡实验的一点小问题和想法,请大家侃侃

2019-07-20 23:12发布

最近在学习原子老大的SD卡实验
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "key.h"
#include "malloc.h"  
#include "MMC_SD.h"   

void SD_Read_Sectorx(u32 sec)
{
        u8 *buf;
        u16 i;
        buf=mymalloc(512);                                //éêÇëÄú′æ
        if(SD_ReadDisk(buf,sec,1)==0)        //¶áè¡0éèÇøμÄÄúèY
        {       
                LCD_ShowString(60,190,200,16,16,"USART1 Sending Data...");
                printf("SECTOR 0 DATA: ");
                for(i=0;i<512;i++)printf("%x ",buf);//′òó&#161;secéè&#199;&#248;êy&#190;Y              
                printf(" DATA ENDED ");
                LCD_ShowString(60,190,200,16,16,"USART1 Send Data Over!");
        }
        myfree(buf);//êí·&#197;&#196;ú′&#230;       
}
       
//ALIENTEK Mini STM32&#191;a·¢°&#229;·&#182;ày′ú&#194;&#235;11
//TFTLCD&#207;&#212;ê&#190;êμ&#209;é   
//&#188;&#188;ê&#245;&#214;§3&#214;£owww.openedv.com
//1&#227;&#214;YêDD&#199;òíμ&#231;×ó&#191;&#198;&#188;&#188;óD&#207;T1&#171;&#203;&#190;
int main(void)
{
        u8 key;                 
        u32 sd_size;
        u8 t=0;         
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        uart_init(9600);                 //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a9600
        LED_Init();                                  //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        LCD_Init();                                   //3&#245;ê&#188;&#187;ˉLCD       
        KEY_Init();                                //°′&#188;ü3&#245;ê&#188;&#187;ˉ  
        mem_init();                                //3&#245;ê&#188;&#187;ˉ&#196;ú′&#230;3&#216;         
        POINT_COLOR=RED;//éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;
        LCD_ShowString(60,50,200,16,16,"Mini STM32");       
        LCD_ShowString(60,70,200,16,16,"SD CARD TEST");       
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2014/3/13");  
        LCD_ShowString(60,130,200,16,16,"KEY0:Read Sector 0");          
        while(SD_Initialize())//&#188;ì2a2&#187;μ&#189;SD&#191;¨
        {
                LCD_ShowString(60,150,200,16,16,"SD Card Error!");
                delay_ms(500);                                       
                LCD_ShowString(60,150,200,16,16,"Please Check! ");
                delay_ms(500);
                LED0=!LED0;//DS0éá&#203;&#184;
        }
        POINT_COLOR=BLUE;//éè&#214;&#195;×&#214;ì&#229;&#206;aà&#182;é&#171;
        //&#188;ì2aSD&#191;¨3é1|                                                                                             
        LCD_ShowString(60,150,200,16,16,"SD Card OK    ");
        LCD_ShowString(60,170,200,16,16,"SD Card Size:     MB");
        sd_size=SD_GetSectorCount();//μ&#195;μ&#189;éè&#199;&#248;êy
        LCD_ShowNum(164,170,sd_size>>11,5,16);//&#207;&#212;ê&#190;SD&#191;¨èYá&#191;
        while(1)
        {
                key=KEY_Scan(0);
                if(key==KEY0_PRES)SD_Read_Sectorx(0);//KEY0°′,&#182;áè&#161;SD&#191;¨éè&#199;&#248;0μ&#196;&#196;úèY
                t++;
                delay_ms(10);
                if(t==20)
                {
                        LED0=!LED0;
                        t=0;
                }
        }              
}
但是如图片中红 {MOD}矩形框内判断是否能检测到SD卡的while()语句,如果测试的时候不插SD卡,软件没有检测到SD卡,就会形成死循环,程序一直在while中打转转,有没有一个好的办法,就是检测不到SD卡,程序还能往下走。






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。