久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3363|回復: 2
收起左側

STM32 SDIO的使用_AN1302例程(共25頁pdf)

[復制鏈接]
ID:296220 發表于 2018-3-24 09:11 | 顯示全部樓層 |閱讀模式
AN1302 STM32 SDIO的使用
本應用文檔(AN1302,對應ALIENTEK 戰艦STM32  擴展實驗2)將教大家如何使用STM32
的SDIO接口來驅動SD卡,并結合FATFS,實現對 SD卡的讀寫操作。   
本文檔分為如下幾部分:
1, SDIO簡介
2, 硬件連接
3, 軟件實現
4, 驗證   
1、SDIO接口簡介
STM32F103大容量系列(FLASH≥256K)產品都含有 SDIO控制器, ALIENTEK  戰艦STM32
開發板所使用STM32F103ZET6 就屬于大容量產品,帶有 SDIO接口。本節,我們將簡單介紹
STM32的 SDIO接口,包括:主要功能及框圖、時鐘、命令與響應和相關寄存器簡介等,最
后,我們將介紹SD卡的初始化流程。

0.png
基于STM32實現SD卡讀寫實用例程
u16 pic_get_tnum(u8 *path)
{         
        u8 res;
        u16 rval=0;
        DIR tdir;                        
        FILINFO tfileinfo;        
        u8 *fn;                                                                                          
    res=f_opendir(&tdir,(const TCHAR*)path);
          tfileinfo.lfsize=_MAX_LFN*2+1;                                                
        tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize);        
        if(res==FR_OK&&tfileinfo.lfname!=NULL)
        {
                while(1)
                {
                res=f_readdir(&tdir,&tfileinfo);                       
                if(res!=FR_OK||tfileinfo.fname[0]==0)break;        
                     fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname);                        
                        res=f_typetell(fn);      
                        if((res&0XF0)==0X50)
                        {
                                rval++;
                        }            
                }  
        }
        return rval;
}


void testwrite(u8 *fname,u8* strx,u32 repeat)
{
        FIL* f_test;
        u8 *databuf;                                                        
        u8 strxlen=strlen((const char*)strx);        
        u32 bufrpt=2048/strxlen;                                 
        u32 rpcnt=0;
        u8 *ptr;
        u8 res,i;                 
        f_test=(FIL*)mymalloc(SRAMIN,sizeof(FIL));      
        databuf=mymalloc(SRAMIN,2048);
        if(f_test==NULL||databuf==NULL)
        {
                myfree(SRAMIN,f_test);
                myfree(SRAMIN,databuf);
                return ;
        }                                          
        res=f_open(f_test,(const TCHAR*)fname,FA_CREATE_NEW|FA_WRITE);
        if(res==FR_OK)
        {
                ptr=databuf;
                for(rpcnt=0;rpcnt<repeat;)
                {
                        for(i=0;i<bufrpt;)
                        {
                                strncpy((char*)ptr,(char*)strx,strxlen);
                                ptr+=strxlen;
                                rpcnt++;i++;
                                if(rpcnt>=repeat)break;   
                        }  
                        printf("\r\nreptx:%02d  strxlen:%d",rpcnt,strxlen);        
                        res=f_write(f_test,databuf,(u32)i*strxlen,&bw);               
                        if(res||bw!=(bufrpt*strxlen))break;                                       
                        ptr=databuf;
                }         
                f_close(f_test);
                printf("\r\nfile size:%d\r\n",rpcnt*strxlen);
        }         
        myfree(SRAMIN,f_test);
        myfree(SRAMIN,databuf);
}                                                         

void show_sdcard_info(void)
{
        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);        
        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);                        
}                                   
int main(void)
{               
        u8 res;
        DIR picdir;                        
        FILINFO picfileinfo;
        u8 *fn;                           
        u8 *pname;                        
        u16 totpicnum;                 
        u16 curindex;               
        u8 key;                                
        u8 pause=0;                        
        u8 t;
        u16 temp;
        u16 *picindextbl;        
           Stm32_Clock_Init(9);
        delay_init(72);               
        uart_init(72,115200);
        LCD_Init();                        
        LED_Init();         
        KEY_Init();                        
        usmart_dev.init(72);
        mem_init(SRAMIN);        
        exfuns_init();                                       
          f_mount(0,fs[0]);                                 
        f_mount(1,fs[1]);                                 
        POINT_COLOR=RED;      
        while(font_init())                                 
        {            
                LCD_ShowString(60,50,200,16,16,"Font Error!");
                delay_ms(200);                                 
                LCD_Fill(60,50,240,66,WHITE);
                delay_ms(200);                                 
        }           
        while(SD_Init())               
        {            
                Show_Str(60,150,240,16,"SD?¨3?ê??ˉ′í?ó!",16,0);
                delay_ms(200);                                 
                LCD_Fill(60,150,240,166,WHITE);
                delay_ms(200);                                 
        }
        show_sdcard_info();
        while(f_opendir(&picdir,"0:/PICTURE"))
        {            
                Show_Str(60,150,240,16,"PICTURE???t?D′í?ó!",16,0);
                delay_ms(200);                                 
                LCD_Fill(60,150,240,166,WHITE);
                delay_ms(200);                                 
        }  
        totpicnum=pic_get_tnum("0:/PICTURE");
          while(totpicnum==NULL)
        {            
                Show_Str(60,150,240,16,"??óDí??????t!",16,0);
                delay_ms(200);                                 
                LCD_Fill(60,150,240,166,WHITE);
                delay_ms(200);                                 
        }
          picfileinfo.lfsize=_MAX_LFN*2+1;                                                
        picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize);        
        pname=mymalloc(SRAMIN,picfileinfo.lfsize);                                
        picindextbl=mymalloc(SRAMIN,2*totpicnum);                                
        while(picfileinfo.lfname==NULL||pname==NULL||picindextbl==NULL)
        {            
                Show_Str(60,150,240,16,"?ú′?·???ê§°ü!",16,0);
                delay_ms(200);                                 
                LCD_Fill(60,150,240,146,WHITE);
                delay_ms(200);                                 
        }         
    res=f_opendir(&picdir,"0:/PICTURE");
        if(res==FR_OK)
        {
                curindex=0;
                while(1)
                {
                        temp=picdir.index;                                                               
                res=f_readdir(&picdir,&picfileinfo);                       
                if(res!=FR_OK||picfileinfo.fname[0]==0)break;        
                     fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);                        
                        res=f_typetell(fn);      
                        if((res&0XF0)==0X50)
                        {
                                picindextbl[curindex]=temp;
                                curindex++;
                        }            
                }
        }   
        Show_Str(60,150,240,16,"?aê???ê?...",16,0);
        delay_ms(1500);
        piclib_init();                                                                                
          curindex=0;                                                                                       
           res=f_opendir(&picdir,(const TCHAR*)"0:/PICTURE");         
        while(res==FR_OK)
        {      
                dir_sdi(&picdir,picindextbl[curindex]);                        
        res=f_readdir(&picdir,&picfileinfo);                       
        if(res!=FR_OK||picfileinfo.fname[0]==0)break;        
             fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);                        
                strcpy((char*)pname,"0:/PICTURE/");                                
                strcat((char*)pname,(const char*)fn);                          
                LCD_Clear(BLACK);
                ai_load_picfile(pname,0,0,lcddev.width,lcddev.height);
                Show_Str(2,2,240,16,pname,16,1);                                 
                t=0;
                while(1)
                {
                        key=KEY_Scan(0);               
                        if(t>250)key=KEY_RIGHT;        
                        if(key==KEY_LEFT)               
                        {
                                if(curindex)curindex--;
                                else curindex=totpicnum-1;
                                break;
                        }else if(key==KEY_RIGHT)
                        {
                                curindex++;                          
                                if(curindex>=totpicnum)curindex=0;
                                break;
                        }else if(key==KEY_UP)
                        {
                                pause=!pause;
                                LED1=!pause;         
                        }
                        if(pause==0)t++;
                        delay_ms(10);
                }                                            
                res=0;  
        }                                                                                          
        myfree(SRAMIN,picfileinfo.lfname);        
        myfree(SRAMIN,pname);                                
        myfree(SRAMIN,picindextbl);                        
}


完整的pdf格式文檔51黑下載地址(共25頁):
STM32 SDIO的使用_AN1302.pdf (1.66 MB, 下載次數: 27)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:138247 發表于 2019-11-7 17:39 | 顯示全部樓層

感謝分享喲。。。
回復

使用道具 舉報

ID:731749 發表于 2020-4-17 22:53 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲小视频在线播放 | 亚洲色图图片 | 国产亚洲精品综合一区 | 午夜影院普通用户体验区 | 暖暖日本在线视频 | 成人欧美一区二区三区黑人孕妇 | 日韩三区在线 | 日韩精品一区二区三区高清免费 | 最新中文字幕在线 | 久久亚洲国产精品日日av夜夜 | 在线观看日韩 | 国产精品一区二区视频 | 国产探花 | 成人国产在线视频 | 欧美国产一区二区 | 午夜av在线| 国产区高清 | 在线一区视频 | 亚洲精品不卡 | 久久美女网 | 国产亚洲人成a在线v网站 | 欧美一级片在线播放 | 91新视频 | 一区二区在线 | 狠狠撸在线视频 | 欧美电影一区 | 亚洲午夜一区二区 | 成人影院网站ww555久久精品 | 中日字幕大片在线播放 | 国产精品成人在线观看 | 高清国产午夜精品久久久久久 | 日批免费看 | 日韩视频在线观看中文字幕 | 国产成人高清在线观看 | 欧美视频区 | 日本精品国产 | 九色视频网站 | 亚洲小视频在线观看 | 天堂一区二区三区 | 夜夜艹| 欧美www在线 |