乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      stm32f103c8t6移植Fatfs文件系統(tǒng)出現(xiàn)的一些問題

       goodwangLib 2019-05-16

      一、環(huán)境
      keil5,使用庫函數(shù)

      二、移植對(duì)象
      stm32f103zet6 >> stm32f103c8t6

      三、連接方式
      硬件SPI1(PA5,6,7)

      四、主函數(shù)代碼

      #include 'stdio.h'#include 'delay.h'#include 'sys.h'#include 'oled.h'#include 'malloc.h' #include 'MMC_SD.h' #include 'ff.h' #include 'exfuns.h'void SD_Read_Sectorx(u32 sec);int main(void){ u32 total,free; delay_init(); //延時(shí)函數(shù)初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí) //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí) LED_Init(); //LED端口初始化 OLED_Init(); //初始化OLED OLED_Clear(); OLED_ShowString(0,0,'OLED ready',12); delay_ms(1000); OLED_Fill(0,0,127,7,0);//清除顯示 delay_ms(1000); exfuns_init(); //為fatfs相關(guān)變量申請(qǐng)內(nèi)存 mem_init(); //初始化內(nèi)存池 while(SD_Initialize()) //檢測(cè)SD卡 { OLED_ShowString(0,0,'SD Card Error!',12); delay_ms(200); OLED_Fill(0,0,127,7,0);//清除顯示 delay_ms(200); //LED0=!LED0;//DS0閃爍 } exfuns_init(); //為fatfs相關(guān)變量申請(qǐng)內(nèi)存 f_mount(fs[0],'0:',1); //掛載SD卡 while(exf_getfree('0',&total,&free)) //得到SD卡的總?cè)萘亢褪S嗳萘?{ OLED_ShowString(0,0,'Fatfs Error!',12); delay_ms(200); OLED_Fill(0,0,127,7,0);//清除顯示 delay_ms(200); //LED0=!LED0;//DS0閃爍 } OLED_ShowString(0,0,'FATFS OK!',12); OLED_ShowString(0,1,'Total: MB',12); OLED_ShowString(0,2,'Free : MB',12); OLED_ShowNum(48,1,total>>10,5,12); //顯示SD卡總?cè)萘?MB OLED_ShowNum(48,2,free>>10,5,12); while(1) { } }
      • 1

      • 2

      • 3

      • 4

      • 5

      • 6

      • 7

      • 8

      • 9

      • 10

      • 11

      • 12

      • 13

      • 14

      • 15

      • 16

      • 17

      • 18

      • 19

      • 20

      • 21

      • 22

      • 23

      • 24

      • 25

      • 26

      • 27

      • 28

      • 29

      • 30

      • 31

      • 32

      • 33

      • 34

      • 35

      • 36

      • 37

      • 38

      • 39

      • 40

      • 41

      • 42

      • 43

      • 44

      • 45

      • 46

      • 47

      • 48

      • 49

      • 50

      • 51

      • 52

      • 53

      • 54

      • 55

      • 56

      • 57

      • 58

      • 59

      • 60

      四、問題
      0.移植準(zhǔn)備
      ①修改device為STM32F103C8
      ②將C/C++中define“STM32F10X_HD,USE_STDPERIPH_DRIVER”改為“STM32F10X_HD,USE_STDPERIPH_DRIVER”
      ③更換相應(yīng)的啟動(dòng)文件(.s)

      1.編譯報(bào)錯(cuò)內(nèi)存不足
      ①從工程中刪除cc936.c等文件,c8t6裝不下
      ②mallco.h中#define MEM_MAX_SIZE 421024改小,測(cè)試101024可用,需保證編譯結(jié)果后面兩個(gè)size的和小于20k
      ③#define _CODE_PAGE 936 改為 #define _CODE_PAGE 1 使用ascii碼減少存儲(chǔ)開銷
      ④相應(yīng)#define _LFN_UNICODE 0 和 #define _STRF_ENCODE 0 ,使用ascii

      2.程序死在while(SD_Initialize())中
      ①強(qiáng)烈建議檢查連線,特別是SLK
      ②最好單片機(jī)單獨(dú)供電而不是使用仿真器供電,可能由于供電不足導(dǎo)致spi初始化的高電平不符合要求
      ③如果使用仿真器調(diào)試時(shí)卡在此處,可能是卡在以下代碼

      while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET){	//...}
      • 1

      • 2

      • 3

      • 4

      百度到的解釋是“rxne只能讀一次,如果調(diào)試器讀取了,那么程序就永遠(yuǎn)讀不到了”,此外SPI運(yùn)行時(shí)有一定幾率程序會(huì)卡死在檢查接受標(biāo)志位處RXNE,論壇上的解決方案是將檢查接受標(biāo)志位改為檢查忙狀態(tài),所以可以換成

      while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET){ //...}
      • 1

      • 2

      • 3

      • 4

      經(jīng)測(cè)試此方案可行。
      ④如果改為SPI2,可能是SPI2時(shí)鐘初始化的問題。SPI1的時(shí)鐘在APB2上而SPI2的在APB1上,初始化需調(diào)用不同的函數(shù)。如:

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);	//硬件SPI1RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);	//硬件SPI2
      • 1

      • 2

      3.程序死在while(exf_getfree(“0”,&total,&free))中
      ①一般來說不會(huì)在這句話中卡住,卡住了檢查下連線吧
      ②設(shè)置SPI為高速模式時(shí)可能由于時(shí)鐘太快導(dǎo)致初始化不成功(也可能是初始化之后的部分導(dǎo)致無法正常使用,ZET6沒有這個(gè)問題而C8T6存在),可以適當(dāng)降低高速模式的時(shí)鐘

      //SD卡正常工作的時(shí)候,可以高速了void SD_SPI_SpeedHigh(void){ //SPI1_SetSpeed(SPI_BaudRatePrescaler_2);//原函數(shù) SPI1_SetSpeed(SPI_BaudRatePrescaler_4);//修改}
      • 1

      • 2

      • 3

      • 4

      • 5

      • 6

      五、資料
      1.SPI存儲(chǔ)器W25X16,Debug時(shí)卡在SPI_I2S_GetFlagStatus(SPI1, 2.SPI_I2S_FLAG_RXNE
      3.SPI調(diào)試小結(jié)
      4.fatfs文件系統(tǒng)移植 讀寫時(shí)莫名出現(xiàn)FR_DISK_ERR問題
      5.死循環(huán)了:while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
      6.SPI/I2S調(diào)試總結(jié)
      7.F103C8T6移植Fatfs文件系統(tǒng)時(shí)編譯報(bào)錯(cuò)空間不夠

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多