stm32f429 移植RT_Thread
當然現在用的很火的STM32也不例外;RTT最大的特點(diǎn)就是線(xiàn)程數不限,支持以線(xiàn)程為基本調度單位的多任務(wù)系統。調度算法是基于優(yōu)先級的全搶占式線(xiàn)程調度,支持256個(gè)線(xiàn)程優(yōu)先級(亦可配置成32個(gè)線(xiàn)程優(yōu)先級),0優(yōu)先級代表 最高優(yōu)先級,255優(yōu)先級留給空閑線(xiàn)程使用;相同優(yōu)先級上支持多個(gè)線(xiàn)程,這些相同優(yōu)先級的線(xiàn)程采用可設置時(shí)間片長(cháng)度的時(shí)間片輪轉調度;調度器尋找下一個(gè)最 高優(yōu)先級就緒線(xiàn)程的時(shí)間是恒定的(O(1))。系統不限制線(xiàn)程數量的多少,只與物理平臺的具體內存相關(guān)。
現在2014.2月,RTT已經(jīng)更新到1.2.0版本,當然現在STM32也出了最新的429/439,但是RTT里只支持了40X;但是40X與429/439在硬件上區別不是很大這樣我們就可以用40X作為模板進(jìn)行移植了。
在移植之前大家要知道,RTT是靠scons來(lái)編譯和生成keil或者IAR的工程文件的,所以用scons這個(gè)工具在移植時(shí)比較方便,不必自己去找那些文件。
在此之前確保自己電腦上已經(jīng)安裝了Python和scons:下載的地址 Python:http://www.python.org/download/ (在此我用的是Python2.7)
scons: http://www.scons.org/download.php 選擇適合自己系統版本
先安裝Python;再把Python的安裝路徑添加到系統的PATH中;再安裝scons一路next;會(huì )自動(dòng)安裝到:XXXPython27Scripts目錄下,再把這路徑添加到系統PATH中;弄好了后分別在cmd下運行一下Python -v,scons -v看安裝是否成功。
接下來(lái)去RTT官網(wǎng)下載源碼,一般首頁(yè)的右上角就會(huì )有下載鏈接:下載下來(lái)后解壓到一個(gè)盤(pán)的根目錄:改名為RT_Thread,比如D:RT_Thread;在系統的系統變量中添加一個(gè)RTT_ROOT 變量,把自己剛剛那個(gè)路徑填進(jìn)去,運行一下set RTT_ROOT,看是否成功。
再把stm32f429的庫函數下載下來(lái)。
現在回到剛剛放RT_thread文件的中去:


大家可以看看rtconfig.h文件,看了就知道是怎么注冊一個(gè)組件,刪減一個(gè)組件;默認就開(kāi)了一個(gè)finsh,我們就先移植這個(gè)簡(jiǎn)單的。
打開(kāi)命令行cmd ,切換到stm32f40x目錄下,執行 scons --target=mdk4 –s ,這下就把keil工程建建好了,keil打開(kāi)工程;大家會(huì )發(fā)現keil的設置有些問(wèn)題,我們手動(dòng)改一下,就是芯片選型,還有就是外部晶振。這兩個(gè)改好后;我們看看工程文件:

// Internal SRAM memory size[Kbytes] <8-64>
// Default: 64
#define STM32_SRAM_SIZE 192 //stm32f429 是 256K 在0x20000000后有192K 在0x10000000還有64k
#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024)
#define RT_USING_UART1
//#define RT_USING_UART2
//#define RT_USING_UART3
// Console on USART: <0=> no console <1=>USART 1 <2=>USART 2 <3=> USART 3
// Default: 1
#define STM32_CONSOLE_USART 1
下一個(gè)文件夾STM32_Stperiph:這個(gè)文件改的多一點(diǎn),因為和STM32F429的庫文件有些不合,先把這個(gè)目錄下的文件都移除;看看最后的那個(gè)startup匯編文件也不對,之前不是下載了stm32f429的庫文件嘛,把429要的庫文件替換STM32_Stperiph下的文件,把里面的startup_stm32f429_439xx.s替換原來(lái)的startup_stm32f4xx.s,分別在在剛剛拷貝出來(lái)的文件里stm32f40xLibrariesSTM32F4xx_StdPeriph_Driverinc src和
stm32f40xLibrariesCMSISSTSTM32F4xxSourceTemplatesarm目錄下。再把這文件的文件添加到STM32_Stperiph下。
那么我們先編譯一下,會(huì )發(fā)現有錯誤,為什么呢?因為我們忘了還有一個(gè)文件忘改了,那就是stm32f4xx_conf.h;它在stm32f4xxdrivers目錄下,把新下的庫文件里面的stm32f4xx_conf.h拷貝過(guò)來(lái)。
在編譯一次,應該就可以通過(guò)了,下載下去就可以看見(jiàn)串口打印出信息了。
再次要確定自己的晶振是不是25MHz,如果是8MHz就必須在stm32f4xx_conf.h中加上:(這是在readme.txt有說(shuō))
#if defined (HSE_VALUE)
/* Redefine the HSE value; its equal to 8 MHz on the STM32F4-DISCOVERY Kit */
#undef HSE_VALUE
#define HSE_VALUE ((uint32_t)8000000)
#endif /* HSE_VALUE */
評論