STM32完美移植RT-Thread實時作業系統
官網下載下傳RT-Thread nano:下載下傳 - RT-Thread物聯網作業系統
解壓打開下載下傳檔案夾
打開自己的裸闆檔案夾

在自己的裸闆檔案夾中建立RT-THREAD,在RT-THREAD下建立RT-include、RT-port、RT-source(名字自己定)
再打開USER建立boaed檔案夾
下面開始複制相關檔案
打開RT-Thread——bsp——stm32f103-msh——RTE——RTOS——複制board.c和rtconfig.h到自己的檔案夾USER——board下
在USER——board下建立board.h
打開下載下傳檔案夾的src——複制全部檔案到自己檔案夾RT-Thread——RT-source下
打開下載下傳檔案的libcpu——arm——cortex-m3下複制context_rvds.S和cpuport.c檔案到自己檔案夾的RT-Thread——RT-port下
打開下載下傳檔案的include下複制全部檔案到RT-Thread——RT-include下
再打開下載下傳檔案的components下複制兩個檔案夾到RT-Thread——RT-include下
至此所有檔案複制完畢
打開工程添加檔案
點選
先添加如下檔案夾
在USER下添加
在RT-port下添加
在RT-source下添加
在RT-include下添加所有剛剛建立檔案夾下的檔案,包括複制過來的兩個檔案夾下的檔案
再點選
選擇C/C++
添加路徑
打開stm32f1xx_it下找到如下函數,屏蔽
打開board.c找到如圖函數
點選SystemCoreClock找到本體更改合适頻率系統頻率
再把系統時鐘函數添加到此函數中
打開更改建立的board.h添加如下代碼(sys.h中是系統時鐘頻率初始化和頭檔案#include “stm32f1xx.h”)然後在board.c下添加頭檔案#include “board.h”
再打開rtconfig.h更改相關參數,根據需要改
#define RT_THREAD_PRIORITY_MAX 8
//表示 RT-Thread 支援多少個優先級,取值範圍為 8~256,預設為 32。
#define RT_TICK_PER_SECOND 1000
//表示作業系統每秒鐘有多少個 tick即是作業系統的時鐘周期,預設為 1000,即作業系統的時鐘周期 tick 等于 1ms。
#define RT_ALIGN_SIZE 4
//表示 CPU 處理的資料需要多少個位元組對齊,預設為 4 個位元組
#define RT_NAME_MAX 8
//表示核心對象名字的最大長度,取值範圍為 2~16,預設為 8。
#define RT_USING_COMPONENTS_INIT
//RT-Thread 元件初始化,預設使能
#define RT_USING_USER_MAIN
//使用使用者 main 函數,預設打開
#define RT_MAIN_THREAD_STACK_SIZE 512
// main 線程棧大小,取值範圍為 1~4086,機關為位元組,預設為512
#define RT_DEBUG_INIT 0
//調試配置。包括了核心調試配置,元件調試配置和線程棧溢出檢測,目前全部關閉
#define RT_USING_TIMER_SOFT 0
//軟體定時器配置,目前關閉,不使用軟體定時器
#define RT_USING_SEMAPHORE
//内部通信配置,包括信号量、互斥量、事件、郵箱和消息隊列,根據需要配置
#define RT_USING_SMALL_MEM
//記憶體管理配置
參考網址:http://forum.eepw.com.cn/thread/316958/1/
#define RT_USING_CONSOLE
//控制台配置。控制台即是 rt_kprintf()函數調試輸出的裝置,通常使用序列槽。
修改board.c,board.c 是直接從 RT-Thread/3.0.3/bsp 檔案夾下面拷貝過來的, 裡面存放的是與硬體相關的初始化函數,
static uint32_t _SysTick_Config(rt_uint32_t ticks)
//相關的寄存器定義和初始化函數,這個是跟處理器相關的,直接使用固件庫函數,将其注釋。
void *rt_heap_begin_get(void) void *rt_heap_end_get(void)
//RT-Thread 堆配置,如果同時定義了 RT_USING_USER_MAIN 和RT_USING_HEAP 這兩個宏, 表示 RT-Thread 裡面建立核心對象時使用動态記憶體配置設定方案。
void rt_hw_board_init()
//RT-Thread 啟動的時候會調用一個名為 rt_hw_board_init()的函數,從函數名稱我們可以知道它是用來初始化開發闆硬體的,比如時鐘,比如序列槽等。
void SysTick_Handler(void)
//SysTick 中斷服務函數是一個非常重要的函數, RT-Thread 所有跟時間相關的事情都在裡面處理。
找到finsh_port.c屏蔽//#error “TODO 4: Read a char from the uart and assign it to ‘ch’.”
然後編譯,沒有問題
最後在主函數下添加頭檔案
OK,可以完美使用