在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 IAP 設(shè)計(jì)實(shí)例 (二)

            STM32 IAP 設(shè)計(jì)實(shí)例 (二)

            作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
            上一篇介紹了IAP的實(shí)現(xiàn)。這里開始介紹主機(jī)的一個(gè)設(shè)計(jì)實(shí)例。

            本文引用地址:http://www.biyoush.com/article/201611/318459.htm

            目標(biāo)功能:STM32做主機(jī),硬件接口主要包括SD card, USB,CAN, LCD,按鍵。

            主要功能:

            1,通過(guò)USB鏈接到PC,將用于更新的APP程序的BIN文件,放入SD中。

            2,STM32通過(guò)FATFS讀寫SD卡中的文件。

            3,通過(guò)CAN接口發(fā)送數(shù)據(jù)給從機(jī)。

            4,LCD和按鍵用于人機(jī)交互。

            PC通過(guò)STM32 USB讀取SD卡的部分功能直接使用使用了神州三號(hào)開發(fā)板中的例程。移植FATFS參考了網(wǎng)上的一些例子,比較亂。

            [cpp]view plaincopy
            1. intmain(void)
            2. {
            3. uint16_tStatus=0;
            4. delay_init();//延時(shí)初始化
            5. NVIC_Configuration();//設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
            6. LED_Init();//初始化與LED連接的硬件接口
            7. KEY_Init();
            8. uart_init(9600);
            9. if(KEY2==0&&KEY3==0)//按著組合按鍵啟動(dòng),進(jìn)入讀卡器模式
            10. {
            11. sys_mode_flag=MODE_CARD_READ;
            12. GPIO_Config();
            13. /*MAL配置*/
            14. MAL_Config();
            15. /*中斷配置*/
            16. Interrupts_Config();
            17. /*USB接口初始化*/
            18. Set_USBClock();//設(shè)置USB接口時(shí)鐘
            19. USB_Init();//USB接口初始化
            20. while(bDeviceState!=CONFIGURED)
            21. {
            22. ;//reserved
            23. }
            24. USB_Configured_LED();//設(shè)置USB接口的LED指示燈狀態(tài)
            25. while(1)
            26. {
            27. ;
            28. }
            29. }
            30. else
            31. {
            32. sys_mode_flag=MODE_IAP_DEVICE;
            33. Status=SD_Init();
            34. if(Status==SD_OK)
            35. {
            36. /*-----------------ReadCSD/CIDMSDregisters------------------*/
            37. Status=SD_GetCardInfo(&SDCardInfo);
            38. }
            39. if(Status==SD_OK)
            40. {
            41. show_sdcard_info();
            42. /*-----------------SelectCard--------------------------------*/
            43. Status=SD_SelectDeselect((u32)(SDCardInfo.RCA<<16));
            44. }
            45. if(Status==SD_OK)
            46. {
            47. Status=SD_EnableWideBusOperation(SDIO_BusWide_4b);
            48. }
            49. /*SetDeviceTransferModetoDMA*/
            50. if(Status==SD_OK)
            51. {
            52. Status=SD_SetDeviceMode(SD_DMA_MODE);
            53. }
            54. disk_initialize(0);
            55. f_mount(0,&fs);
            56. OSInit();
            57. OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);//創(chuàng)建起始任務(wù)
            58. OSStart();
            59. }
            60. }


            從main函數(shù)可以看出,上電如果按下組合按鍵,進(jìn)入U(xiǎn)SB讀卡器模式,可以在PC上將SD卡識(shí)別成可以移動(dòng)磁盤。沒按組合鍵,則將SD卡,通過(guò)FATFS文件系統(tǒng)掛載。

            [cpp]view plaincopy
            1. //掃描path錄下的所有BIN文件
            2. voidscan_files(u8*path)
            3. {
            4. OS_CPU_SRcpu_sr;
            5. FRESULTres;
            6. FILINFOfinfo;
            7. charlfn[50];//用于存長(zhǎng)文件名
            8. DIRdirs;
            9. char*result;
            10. u8i=0;
            11. finfo.lfsize=sizeof(lfn);
            12. finfo.lfname=lfn;
            13. OS_ENTER_CRITICAL();
            14. res=f_opendir(&dirs,(constTCHAR*)path);/*打開工作目錄*/
            15. if(res==FR_OK)
            16. {
            17. printf("workingdirectory:%srn",path);
            18. fcount=0;
            19. while(f_readdir(&dirs,&finfo)==FR_OK)/*依次讀取文件名*/
            20. {
            21. if(finfo.fattrib&AM_ARC)/*判斷是否為存檔型文檔*/
            22. {
            23. if(finfo.lfname[0]==NULL&&finfo.fname!=NULL)/*當(dāng)長(zhǎng)文件名稱為空,短文件名非空時(shí)轉(zhuǎn)換*/
            24. {
            25. finfo.lfname=finfo.fname;
            26. }
            27. /*文件名為空即到達(dá)了目錄的末尾,退出*/
            28. if(!finfo.lfname[0])
            29. {
            30. break;
            31. }
            32. result=strstr(finfo.lfname,".bin");
            33. if(result!=NULL)
            34. {
            35. printf("rn第%d個(gè)文件:rn",fcount);
            36. printf("fname:%srn",finfo.lfname);
            37. printf("fsize:%drn",finfo.fsize);
            38. if(fcount
            39. {
            40. strcpy((char*)fileList[fcount],finfo.lfname);
            41. }
            42. else//大于最多的存儲(chǔ)量
            43. {
            44. break;
            45. }
            46. fcount++;
            47. }
            48. }
            49. }
            50. }
            51. qsort(fileList,fcount,sizeof(fileList[0]),cmp);
            52. printf("rn--------------------aftersort--------------------rn");
            53. for(i=0;i
            54. {
            55. printf("rn第%d個(gè)文件:rn",i);
            56. printf("fname:%srn",(char*)fileList[i]);
            57. }
            58. OS_EXIT_CRITICAL();
            59. }


            這個(gè)函數(shù)用于掃描某個(gè)目錄下面的文件,支持英文長(zhǎng)文件名。關(guān)于FATFS的長(zhǎng)文件名,只需配置ffconf.h中
            #define _CODE_PAGE437

            #define_USE_LFN1/* 0 to 3 */

            然后讀取文件的時(shí)候使用finfo.lfname進(jìn)行操作。

            上面代碼對(duì)讀出來(lái)的文件名進(jìn)行了排序。使用stdlib.H標(biāo)準(zhǔn)庫(kù)中的函數(shù)qsort進(jìn)行。

            下面是串口調(diào)式的打印信息

            剩下的就是讀取文件,CAN發(fā)送數(shù)據(jù)的功能。



            關(guān)鍵詞: STM32IA

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉