1. 程式人生 > >四軸飛行器Bootloader和固件的更新

四軸飛行器Bootloader和固件的更新

轉換成 www 對齊 height eight 直接 http idt ram

在四軸飛行器中,為了方便用戶後期對飛行器進行固件升級,一般都采用了Bootloader技術。所謂Bootloader就是指單片機啟動後首先運行的一段代碼,它的最主要功能就是用於檢查用戶是否要更新飛控固件。如果是,則進入飛控固件更新進程,如果否,則直接運行當前的飛控固件。此外,有的Bootloader裏面也包含進了一些基本的硬件檢測功能,如果硬件檢測失敗,就不進入飛控功能。通常,Bootloader都要配合飛行器的上位機軟件來使用。

下面以圓點博士小四軸飛行器為例進一步對Bootloader進行說明。在圓點博士小四軸飛行器的上位機軟件中,提供了飛行器和遙控器的固件更新功能。這樣用戶不需要借助其它單片機下載工具,就可以非常方便地通過上位機來直接更新飛行器和遙控器的固件。圓點博士小四軸飛行器提供了飛行器和遙控器的固件源代碼,當用戶重新編譯並更新這些固件的時候,需要註意以下這個問題:

1,圓點博士小四軸飛行器上位機的固件更新只支持後綴為bin的數據文件,所以用戶要把其它格式的固件(比如hex)轉換成bin格式的文件。對於keil編譯器,軟件已經自帶該功能,用戶只需要根據下圖進行設置即可。

技術分享圖片

由於Keil默認會生成後綴為axf的固件,fromelf這個命令就是把axf固件轉換成bin固件的意思。它的形式是: fromelf.exe -bin -o 目標路徑 源路徑。

2,同時,我們要設置程序的起始地址,使得這些重新編譯後的固件能夠配合Bootloader來工作。下圖是Keil軟件設置程序起始地址的設置界面:

技術分享圖片

對於圓點博士小四軸遙控器,由於采用的是STM32F103C8型號的芯片,它的ROM容量是64K,RAM容量是20K,所以ROM的大小轉換成16進制就是0x10000,RAM的大小轉換成16進制就是0x5000。由於STM32的程序開始地址是0x8000000,然後Bootloader占用了0x8000的空間,所以ROM的起始設置為0x8008000,而RAM的開始地址保持為0x20000000。

對於圓點博士小四軸飛行器,由於采用的是STM32F103RC型號的芯片,它的ROM容量是256K,RAM容量是48K,所以ROM的大小轉換成16進制就是0x40000,RAM的大小轉換成16進制就是0xC000。同樣地,由於STM32的程序開始地址是0x8000000,然後Bootloader占用了0x8000的空間,所以ROM的起始設置為0x8008000,而RAM的開始地址保持為0x20000000。

3,在上一步中,我們在編譯器上修改了程序起始地址,我們同樣要在代碼裏面做些修改,使得編譯後的固件能正常工作。圓點博士小四軸飛行器使用的是STM32單片機,所以需要在固件源代碼裏面main函數的開始位置加入下列代碼,把程序的中斷向量的開始位置和代碼的起始位置對齊。該代碼的意思是把STM32單片機的中斷向量起始地址從0x8000000的位置向後偏移0x8000的大小,變成0x8008000。

NVIC_SetVectorTable(NVIC_VectTab_FLASH,(u32)0x8000);

經過這三個步驟,用戶自行編寫的代碼就可以通過圓點博士小四軸飛行器上位機下載到飛行器和遙控器,並正常使用了。

該文章出自圓點博士無人機www.bspilot.com

四軸飛行器Bootloader和固件的更新