STM32 UCOSII U盤出錯問題

2021-10-04 04:18:23 字數 1284 閱讀 5870

晶元:stm32f767igt6

儲存:讀卡器+2g/8g 卡,u盤

檔案系統:fatfs r0.12a

作業系統:ucosii v1.30.02

參考:正點原子例程

使用的其他外設:sdio,網路lwip,sdram,usb從裝置,ltdc

u盤f_mount有時掛載不上,在掛載處,err返回值是0x01,根據返回值數值可確定是fr_disk_err,

有時掛載上了,f_open或者f_write返回fr_disk_err

如圖

有時卡死,卡死的**是f_mount或者f_open或者f_write或者f_read。一直在fatfs的某個迴圈中,具體哪個我忘記了,只知道有個返回**是msc_read_busy。

有時掛載不上,有時能掛載上,但是在其他地方出錯,比較沒規律,特別的是會卡死一直返回

造成假象是我以為是移植進fatfs時的底層函式,disk_read那裡出了問題,因為進入後最終是disk_read那裡返回值錯誤。

u盤的列舉函式usbh_process不宜太快,因此這裡是1ms一次。

由於使用了ucosii,進入中斷前和退出中斷必須加入這兩條語句,因此usb中斷**更改為:

重點處usb_handle_init的作用是進行usb的初始化,如下

因此,將它注釋掉,改為在main函式中呼叫(其實在起始任務也可以,但是不要關中斷去初始化usb)

由於對usb不熟悉,因此在這裡拋磚引玉。

u盤的列舉不宜太快執行,要有間隔時間,且usb初始化時會進行usb硬體的檢測,其中會進行一些通訊而進入中斷,由於關中斷後初始化不會進入usb中斷通訊,因此出現問題。

當然ucosii進入中斷還是遵循其使用原則,加入那兩個函式。

通過以上解決了此問題,能正常使用。當然不一定出現這個錯誤就能適用,希望能給遇到類似問題的同行進行參考。

STM32 外部中斷 易出錯總結

前言 這些問題都是我之前在工作中遇到的,後來覺得需要總結,自己記憶不好,所以在這個給自己打個mark。一 觸發方式 stm32 的外部中斷是通過邊沿來觸發的,不支援電平觸發 二 外部中斷分組 stm32 的每乙個 gpio 都能配置成乙個外部中斷觸發源,stm32 通過根據引腳的序號不同將眾多中斷觸...

stm32碼盤感測器 STM32編碼器介面模式

1.編碼器 圖1 編碼器示意圖 圖1為編碼器的示意圖,中間是乙個帶光柵的碼盤,光通過光柵,接收管接收到高電平,沒通過,接收到低電平。電機旋轉一圈,碼盤上有多少光柵,接受管就會接收多少個高電平。2.stm32編碼器介面模式 暫存器 stm32的編碼器介面模式在stm32中文參考手冊中有詳細的說明。圖2...

stm32 奇怪的位賦值問題 出錯了

1 在51微控制器裡 下面這兩種操作方法都是一樣的,沒有什麼問題!1 out1 r1 是微控制器的乙個io口 dat是傳進來的乙個資料 if dat 0x80 0 out1 r1 0 0是不亮,1是亮 else out1 r1 1 2 out1 r1 dat 0x8000 stm32裡,這樣操作不行...