Unicode表存储SD卡中读取,转为GBK显示FATFS文件名
本实验将实现如下功能:开机的时候先初始化SD卡,如果SD卡初始化完成,则读取扇区0的数据,然后通过串口打印到电脑上。如果没初始化通过,则在LCD上提示初始化失败。 同样用DS0来指示程序正在运行。
注意:
1,本实验可以SWD下载仿真.
2,如果遇到不能识别的卡,有可能是不兼容造成的,请换卡.
STM32单片机源程序如下:
- #include <stm32f10x_lib.h>
- #include "sys.h"
- #include "usart.h"
- #include "delay.h"
- #include "led.h"
- #include "key.h"
- #include "exti.h"
- #include "timer.h"
- #include "lcd.h"
- #include "touch.h"
- #include "mmc_sd.h"
- #include "24cxx.h"
- #include "text.h"
- #include "SDfont.h"
- #include "exfuns.h"
- #include "malloc.h"
- #include "string.h"
- #include "spi.h"
- #include "ff.h"
-
- u8 buf[512];//SD卡数据缓存区
- const TCHAR flie1[]={"0:news/news.txt"};
- const TCHAR flie2[]={"0:news/apple.txt"};
- const TCHAR flie3[]={"0:news/love.txt"};
- void myflie(const TCHAR *p2)
- {
- FRESULT res=FR_OK;
- u8 a;
- LCD_Clear(WHITE);
- file=(FIL*)mymalloc(SRAMIN,sizeof(file));
- res = f_open(file,p2,FA_OPEN_EXISTING|FA_READ);
- if(!res)
- {
- br=1;
- for (;;)
- {
- for(a=0; a<64; a++) buf[a]=0;
- res = f_read(file, buf, sizeof(buf),&br);
- if (res || br < sizeof(buf)) break; // error or eof
- }
- }
- Show_Str(50,250,300,16,buf,16,0);
- }
- u8 sim900a_hex2chr(u8 hex)
- {
- if(hex<=9)return hex+'0';
- if(hex>=10&&hex<=15)return (hex-10+'A');
- return '0';
- }
- int main(void)
- {
-
- u8 shuzu[20];
- u8 *dst=shuzu;
- u16 temp;
- const u8 *src="我";
- u8 test[2];
- u32 total,free;
- FRESULT res=FR_OK;
- u32 sd_size;
- Stm32_Clock_Init(9);//系统时钟设置
- delay_init(72); //延时初始化
- uart_init(72,9600); //串口1初始化
- LCD_Init(); //初始化液晶
- LED_Init(); //LED初始化
- KEY_Init();
- exfuns_init(); //exfuns 初始化
- mem_init(SRAMIN); //初始化内部内存池
- POINT_COLOR=RED;//设置字体为红色
- LCD_ShowString(50,50,"Mini STM32");
- LCD_ShowString(50,70,"SD Card TEST");
- LCD_ShowString(50,90,"ATOM@ALIENTEK");
- LCD_ShowString(50,110,"Only use sd card");
- LCD_ShowString(50,230,"2014/7/31");
- while(SD_Initialize()!=0)//检测不到SD卡
- {
- LCD_ShowString(50,130,"SD Card Failed!");
- delay_ms(500);
- LCD_ShowString(50,130,"Please Check! ");
- delay_ms(500);
- LED0=!LED0;//DS0闪烁
- }
- //检测SD卡成功
- LCD_ShowString(50,130,"SD Card Checked OK ");
- LCD_ShowString(50,150,"SD Card Size: Mb");
- sd_size=SD_GetSectorCount();//得到扇区数
- LCD_ShowNum(154,150,sd_size>>11,5,16);//显示SD卡容量
- SDFont_Init();
- exfuns_init();
- f_mount(0,fs[0]); //挂载SD卡
- while(exf_getfree("0",&total,&free))
- {
- LCD_ShowString(50,170,"fatfs error!") ;
- delay_ms(200);
- LED0=!LED0;
- }
- LCD_ShowString(50,170,"fatfs ok!") ;
- LCD_ShowString(50,190,"SD Card Size: Mb");
- LCD_ShowNum(154,190,total>>10,5,16);
- LCD_ShowString(50,210,"SD free Size: Mb");
- LCD_ShowNum(154,210,free>>10,5,16);
- Show_Str_Mid(0,30,"!汉字测试成功!",16,240);
- LCD_Clear(WHITE);//清屏
- /****************读取SD卡文件**************/
- // file=(FIL*)mymalloc(SRAMIN,sizeof(file));
- // res = f_open(file,"0:news/news.txt",FA_OPEN_EXISTING|FA_READ);
- // if(!res)
- // {
- // br=1;
- // for (;;)
- // {
- // res = f_read(file, buf, sizeof(buf),&br);
- // if (res || br < sizeof(buf)) break; // error or eof
- // }
- // }
- // Show_Str(0,0,300,16,buf,16,0);
- // f_close(file);
- // myfree(SRAMIN,file);
- // Show_Str(50,270,400,16,"好烦躁啊!!!!",16,0);
-
- test[1]=*src++;
- test[0]=*src++;
- temp=(u16)ff_convert((WCHAR)*(u16*)test,1);
- LCD_ShowNum(50,300,(u32)temp,6,16);
- // dst[0]=sim900a_hex2chr((temp>>12)&0X0F);
- // dst[1]=sim900a_hex2chr((temp>>8)&0X0F);
- // dst[2]=sim900a_hex2chr((temp>>4)&0X0F);
- // dst[3]=sim900a_hex2chr(temp&0X0F);
- // dst[4]=0;
- //// LCD_ShowString(60,110,dst);
- while(1)
- {
- // t=KEY_Scan();
- // if(t)
- // {
- // switch(t)
- // {
- // case 1:
- // myflie(flie1);
- // break;
- // case 2:
- // myflie(flie2);
- // break;
- // case 3:
- // myflie(flie3);
- // break;
- // }
- // }else delay_ms(10);
- delay_ms(200);
- LED0=!LED0;
- }
- }
复制代码
所有资料51hei提供下载:
SD卡 FATFS.rar
(2.23 MB, 下载次数: 37)
|