DSTATUS disk_initialize ( BYTE pdrv /* Physical drive nmuber (0..) */ ) { u8 res=0; switch(pdrv) { #ifdef USE_SD_CARD case SD_CARD: res=SD_Init(); break; #endif case EX_FLASH: W25QXX_Init(); // FLASH_SECTOR_COUNT=2048*12; break; case USB_DISK: if(USBH_UDISK_Status())return 0; else return 1; default: res=1; } if(res)return STA_NOINIT; else return 0; }
//初始化字体 //返回值:0,字库完好. // 其他,字库丢失 u8 font_init(void) { u8 t=0; W25QXX_Init(); while(t<10)//连续读取10次,都是错误,说明确实是有问题,得更新字库了 { t++; W25QXX_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//读出ftinfo结构体数据 if(ftinfo.fontok==0XAA)break; delay_ms(20); } if(ftinfo.fontok!=0XAA)return 1; return 0; }
void SDCard_Init(void) { u32 total,free; u8 res=0; W25QXX_Init(); //初始化W25Q128 my_mem_init(SRAMIN); //初始化内部内存池 my_mem_init(SRAMCCM); //初始化CCM内存池 while(SD_Init())//检测不到SD卡 { LCD_ShowString(30,150,200,16,16,"SD Card Error!"); delay_ms(500); LCD_ShowString(30,150,200,16,16,"Please Check! "); delay_ms(500); LED0=!LED0;//DS0闪烁 } exfuns_init(); //为fatfs相关变量申请内存 f_mount(fs[0],"0:",1); //挂载SD卡 res=f_mount(fs[1],"1:",1); //挂载FLASH. if(res==0X0D)//FLASH磁盘,FAT文件系统错误,重新格式化FLASH { LCD_ShowString(30,150,200,16,16,"Flash Disk Formatting..."); //格式化FLASH res=f_mkfs("1:",1,4096);//格式化FLASH,1,盘符;1,不需要引导区,8个扇区为1个簇 if(res==0) { f_setlabel((const TCHAR *)"1:ALIENTEK"); //设置Flash磁盘的名字为:ALIENTEK LCD_ShowString(30,150,200,16,16,"Flash Disk Format Finish"); //格式化完成 }else LCD_ShowString(30,150,200,16,16,"Flash Disk Format Error "); //格式化失败 delay_ms(1000); } LCD_Fill(30,150,240,150+16,WHITE); //清除显示 while(exf_getfree("0",&total,&free)) //得到SD卡的总容量和剩余容量 { LCD_ShowString(30,150,200,16,16,"SD Card Fatfs Error!"); delay_ms(200); LCD_Fill(30,150,240,150+16,WHITE); //清除显示 delay_ms(200); LED0=!LED0;//DS0闪烁 } POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(30,150,200,16,16,"FATFS OK!"); LCD_ShowString(30,170,200,16,16,"SD Total Size: MB"); LCD_ShowString(30,190,200,16,16,"SD Free Size: MB"); LCD_ShowNum(30+8*14,170,total>>10,5,16); //显示SD卡总容量 MB LCD_ShowNum(30+8*14,190,free>>10,5,16); //显示SD卡剩余容量 MB }
//初始化磁盘 DSTATUS disk_initialize ( BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { u8 res=0; switch(pdrv) { case SD_CARD://SD卡 res=SD_Init();//SD卡初始化 break; case EX_FLASH://外部flash W25QXX_Init(); FLASH_SECTOR_COUNT=2048*12;//W25Q1218,前12M字节给FATFS占用 break; default: res=1; } if(res)return STA_NOINIT; else return 0; //初始化成功 }
w_err_t spi_flash_open(w_blkdev_s *dev) { static w_bool_t init_flag = W_FALSE; if(wind_strcmp(dev->name,"spi_flash0") == 0) { dev->blkaddr = 0; dev->blksize = 512; dev->blkcnt = 16384; } else { dev->blkaddr = 16384; dev->blksize = 512; dev->blkcnt = 16384; } if(!init_flag) { W25QXX_Init(); init_flag = W_TRUE; } return W_ERR_OK; }
int main(void) { u32 fontcnt; u8 i,j; u8 fontx[2];//gbk码 u8 key,t; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 usmart_dev.init(72); //初始化USMART LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化按键 LCD_Init(); //初始化LCD W25QXX_Init(); //初始化W25Q128 my_mem_init(SRAMIN); //初始化内部内存池 exfuns_init(); //为fatfs相关变量申请内存 f_mount(fs[0],"0:",1); //挂载SD卡 f_mount(fs[1],"1:",1); //挂载FLASH. while(font_init()) //检查字库 { LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //设置字体为红色 LCD_ShowString(30,50,200,16,16,"WarShip STM32"); while(SD_Init()) //检测SD卡 { LCD_ShowString(30,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(30,70,200+30,70+16,WHITE); delay_ms(200); } LCD_ShowString(30,70,200,16,16,"SD Card OK"); LCD_ShowString(30,90,200,16,16,"Font Updating..."); key=update_font(20,110,16,"0:");//更新字库 while(key)//更新失败 { LCD_ShowString(30,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(30,110,200,16,16,"Font Update Success! "); delay_ms(1500); LCD_Clear(WHITE);//清屏 } POINT_COLOR = MAGENTA; Show_Str(20,20,200,24,"第十一届全国电子",24,0); Show_Str(80,50,200,24,"设计大赛",24,0); POINT_COLOR = BLUE; Show_Str(60,80,200,24,"武昌首义学院",24,0); Show_Str(30,130,200,24,"参赛题目课题:",24,0); Show_Str(45,160,200,24,"旋转倒立摆",24,0); Show_Str(30,210,200,24,"参赛者:李观称",24,0); Show_Str(45,240,200,24,"赖丽清,张建",24,0); while(1) { fontcnt=0; for(i=0x81; i<0xff; i++) { fontx[0]=i; // LCD_ShowNum(118,150,i,3,16); //显示内码高字节 for(j=0x40; j<0xfe; j++) { if(j==0x7f)continue; fontcnt++; // LCD_ShowNum(118,170,j,3,16); //显示内码低字节 // LCD_ShowNum(118,190,fontcnt,5,16);//汉字计数显示 // fontx[1]=j; // Show_Font(30+132,220,fontx,24,0); // Show_Font(30+144,244,fontx,16,0); // Show_Font(30+108,260,fontx,12,0); t=200; while(t--)//延时,同时扫描按键 { delay_ms(1); } LED0=!LED0; } } } }
int main(void) { //定义全局变量 u8 key,mode; u16 t=0; u8 tmp_buf[33]; //函数初始化 delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 usmart_dev.init(72); //初始化USMART LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化按键 NRF24L01_Init(); //初始化NRF24L01 W25QXX_Init(); //初始化W25Q128 my_mem_init(SRAMIN); //初始化内部内存池 LCD_Init(); //初始化LCD exfuns_init(); //为fatfs相关变量申请内存 f_mount(fs[0],"0:",1); //挂载SD卡 f_mount(fs[1],"1:",1); //挂载FLASH. //检查中文字库 while(font_init()) //检查字库 { LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //设置字体为红色 LCD_ShowString(30,50,200,16,16,"WarShip STM32"); while(SD_Init()) //检测SD卡 { LCD_ShowString(30,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(30,70,200+30,70+16,WHITE); delay_ms(200); } LCD_ShowString(30,70,200,16,16,"SD Card OK"); LCD_ShowString(30,90,200,16,16,"Font Updating..."); key=update_font(20,110,16,"0:");//更新字库 while(key)//更新失败 { LCD_ShowString(30,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(30,110,200,16,16,"Font Update Success! "); delay_ms(1500); LCD_Clear(WHITE);//清屏 } //检查无线通信 while(NRF24L01_Check()) { LCD_ShowString(30,130,200,16,16,"NRF24L01 Error"); delay_ms(200); LCD_Fill(30,130,239,130+16,WHITE); delay_ms(200); } //初始化界面 POINT_COLOR = MAGENTA; Show_Str(20,20,200,24,"第十一届全国电子",24,0); Show_Str(80,50,200,24,"设计大赛",24,0); while(1) { //按键扫描 key=KEY_Scan(0); if(key!=0) { LCD_Clear(WHITE); Show_Str(60,20,200,24,"旋转倒立摆",24,0); Show_Str(20,50,200,24,"任务1:",24,0); Show_Str(20,80,200,24,"任务2:",24,0); Show_Str(20,110,200,24,"任务3:",24,0); Show_Str(20,140,200,24,"任务4:",24,0); Show_Str(20,170,200,24,"任务5:",24,0); Show_Str(20,200,200,24,"任务6:",24,0); while(1) { key=KEY_Scan(0); //WKUP_PRES 功能:返回主界面 if(key==WKUP_PRES) { MUSE_TASK(); } //KEY1_PRES 功能:执行任务1 else if(key==KEY0_PRES) { KEY0_TASK(); } // //KEY1_PRES 功能:执行任务1 // else if(key==KEY1_PRES) // { // mode=1; // break; // } // //KEY2_PRES 功能:执行任务2 // else if(key==KEY2_PRES) // { // mode=1; // break; // } // //KEY3_PRES 功能:执行任务3 // else if(key==KEY3_PRES) // { // mode=1; // break; // } // //KEY4_PRES 功能:执行任务4 // else if(key==KEY4_PRES) // { // mode=1; // break; // } // //KEY5_PRES 功能:执行任务5 // else if(key==KEY5_PRES) // { // mode=1; // break; // } // //KEY6_PRES 功能:执行任务6 // else if(key==KEY6_PRES) // { // mode=1; // break; // } // //KEY7_PRES 功能:执行任务7 // else if(key==KEY7_PRES) // { // mode=1; // break; // } // //KEY8_PRES 功能:执行任务8 // else if(key==KEY8_PRES) // { // mode=1; // break; // } // } } t++; if(t==100) //LCD_ShowString(10,150,230,16,16,"KEY0:RX_Mode KEY1:TX_Mode"); //闪烁显示提示信息 Show_Str(10,150,230,24,"按任意键进入主菜单",24,0); if(t==200) { LCD_Fill(10,150,240,150+50,WHITE); t=0; } delay_ms(5); } }