水平不行,光入坑了。每次爬出來都精疲力竭。
把野火的SD卡測試程序,移植到字節的xi項目中,說啥也不行,直接用野火的程序就OK,移植過來就不行。
除了移植程序相關的.h.c文件外,發現一個很坑的文件,就是那個hal_conf文件。這裏除了定義包含哪些庫文件,還有其他的一些定義,已經不止一次被這個文件坑死。
這次移植sd卡程序,我的項目程序的conf文件,多了一行定義
#define USE_SD_TRANSCEIVER 1U /*!< use uSD Transceiver */
野火的程序裏沒有。
然後我的程序要麼初始化失敗,要麼卡在Wait_SDCARD_Ready()這個函數裏出不來,後來把定義改成
#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */
這樣就能初始化成功了,也不卡在上面那個函數裏了。但是讀寫還是不行
後來發現野火程序裏寫了一句:SDMMC只能訪問AXI_SRAM
然後我就把用於讀寫SD卡的數組定義到了AXI_SRAM,但是還是不行。簡直要崩潰
有病亂投醫,又改了3個地方
一個是SDMMC的分頻: uSdHandle.Init.ClockDiv = 8;
原來是0. 改成了8
一個是systick的中斷優先級,在conf文件裏:#define TICK_INT_PRIORITY ((uint32_t)0x0E) /*!< tick interrupt priority */
另一個是SDMMC的中斷優先級:HAL_NVIC_SetPriority(SDMMC1_IRQn,3,0); //配置SDMMC1中斷
然後。。。。。。。
奇蹟出現了!!!!
讀寫測試成功了!!!!
2020年1月1日,計劃是把fatfs調好,沒想到從早調到晚上,不帶fatfs的程序都一直沒整明白。還好苦心人天不負,得到點安慰!
水平不行,光入坑了,程序照抄都抄不明白。