STM32固體庫創建demo
下載相關文件
keil5下載地址:keil5
下載相關的pack包:Keil.STM32F1xx_DFP.2.1.0.pack
移植所需的freertos源碼:FreeRTOSv9.0.0.exe
移植所需的STM32固件庫:STM32F10x_StdPeriph_Lib_V3.5.0.rar
建立固體庫項目
建立如下圖所示的項目組:
BSP目錄放相關的driver.
FreeRTOS目錄將放置我們所需移植的東西
Libraries目錄將防止我們固體庫所需的代碼如下:
USER放置main函數,並放置一些用戶自己定製的一些文件
如何真的進行相關的操作可以參考STM32F1開發指南-庫函數版本_V3.1 .pdf的第三章
差不多準備工作完成了,下面重點就是如何移植FreeRTOSv9.0.0
移植FreeRTOSv9.0.0到STM32F103中
1.1打開解壓後點源碼
1.2雙擊打開“FreeRTOS”文件夾,看到如下文件
圖中圈圈的就是源碼了,整個文件夾拷貝到新建工程的“FreeRTOS”文件夾中
1.3在源碼文件夾中**\FreeRTOS\Demo\CORTEX_STM32F103_Keil這個路徑下,找到文件FreeRTOSConfig.h**,拷貝到工程文件夾FreeRTOS中
1.4打開keil,添加文件
添加文件如上如所示
“port.c”文件路徑…\FreeRTOS\Source\portable\RVDS\ARM_CM3
“heap_2.c”文件路徑…\FreeRTOS\Source\portable\MemMang
“list.c”、“queue.c”、“tasks.c”文件路徑…\FreeRTOS\Source
1.5添加頭文件
注意填入:STM32F10X_HD,USE_STDPERIPH_DRIVER
1.6修改main函數
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "misc.h"
#include "led.h"
void LED0_Task(void * pvParameters);
void LED1_Task(void * pvParameters);
int main(void)
{
LED_Init();
xTaskCreate(LED0_Task, (const char *)"LED0", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3, NULL);
xTaskCreate(LED1_Task, (const char *)"LED1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 4, NULL);
vTaskStartScheduler();
}
void LED0_Task(void * pvParameters)
{
while (1)
{
LED0 = !LED0;
vTaskDelay(800 / portTICK_RATE_MS);
}
}
void LED1_Task(void * pvParameters)
{
while (1)
{
LED1 = !LED1;
vTaskDelay(500 / portTICK_RATE_MS);
}
}
1.7修改啓動文件
遇到問題
在移植過程中難免有錯誤。需要我們去解決
問題一 編譯
…\OBJ\FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred from tasks.o).
可以選擇在BSP目錄下添加相關的程序代碼。
void vApplicationTickHook(void)
{
}
關於項目
本項目在github上已經有了,可以從我的github上進行下載。