在stm32上使用DFU


    今天在STM32上嘗試了一下DFU功能。使用DFU需要准備PC上的軟件DfuSe,驅動程序就在軟件的安裝目錄下;另外還需要DFU固件的MDK的工程。

    因為網上有很多圖文教程,這里只說下大致的流程:

    首先修改DFU工程文件,根據板子的情況修改上拉電阻的使能引腳,如果是12M的外部晶振還需要修改時鍾的配置;同時,DFU模式是通過判斷某一引腳(比如按鍵是否按下)來選擇是否進入的,因此這個引腳也要根據板子的情況自定義。最后就是工程的Option里ROM起始地址及范圍的設置(例如0x08000000和0x3000)。完成后就可以編譯,燒到板子上了。

    用戶的程序也需要修改,打開項目,修改ROM的起始地址為0x08003000,把大小從0x80000改為0x7D000(這里用的是stm32f103zet6,512K的內部FLASH)。資料上提到需要將調用函數NVIC_SetVectorTable()的參數進行修改,但是在我的工程里並沒有調用這個函數,而是直接操作寄存器,因此需要修改的是宏定義VECT_TAB_OFFSET,將其從0x0改為0x3000。另外,為了后面產生.dfu文件,需要在Option中設置編譯生成Hex文件。

    然后安裝DfuSe,用DFU File Manager把用戶程序的Hex文件轉換為.dfu后綴的文件。連接好USB線,按下板上的按鍵並上電,如果一切正常則PC會識別新設備。安裝好驅動程序后,打開DfuSe Demostration軟件,就可以看到已連接設備了。接下來下載過程都是很簡單的。

    不過,在我第一次下載好程序,板子重新上電后,stm32並沒有成功運行用戶程序,在Debug中發現固件沒有被全部燒寫進FLASH。后來在DfuSe Demostration中找到了原因,在Actions一欄中的Internl FLASH只有128個扇區,每個扇區1K,而我的固件有150K左右。經過摸索,才發現這關於Internal FLASH的描述是由板上的DFU固件提供的,在usb_desc的字符串DFU_StringInterfaceX中修改。修改后,重新下載固件,並燒寫用戶程序,運行一切正常。

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM