移植RTT到STM32:準備一個工程包括LED驅動和串口驅動
1.首先到KEIL官網下載RTT軟件包
2.把軟件包的文件放在你準備的工程裏面
3.打開工程,新建組,並把對應的文件添加進去
4.添加libcpu的時候,我用的是M4和MDK編譯器,添加以下兩個文件即可
5.添加路徑
6.編譯會發現有錯誤
7.rtconfig.h文件中去掉#include “RTE_Components.h”
還有幾個中斷函數重複了,看錯誤提示刪掉即可
8.新建一個board.h文件,把board.c文件裏包含的頭文件及main.h添加進去
9.把需要用到外設的初始化函數寫入void rt_hw_board_init()函數裏,先初始化串口
新建線程
- 在main.c中,main函數前初始化任務句柄爲NULL
- 新建線程,並在main函數前聲明
- 創建一個線程對象並對其分配內存及優先級
- 啓動任務調度
- 在線程裏寫你所需要實現的東西
代碼如下:
#iinclude"mian.h"
void LED1(void *parg);
void LED2(void *parg);
rt_thread_t led1=RT_NULL;//初始化任務句柄爲NULL
rt_thread_t led2=RT_NULL;
int main(void)
{
led1=rt_thread_create("LED1",LED1,RT_NULL,512,3,20);
led2=rt_thread_create("LED2",LED2,RT_NULL,512,3,20);
if(RT_NULL!=led1)
{
rt_thread_startup(led1);//啓動任務調度
}
else
{
return -1;
}
if(RT_NULL!=led2)
{
rt_thread_startup(led2);
}
else
{
return -1;
}
while(1)
{
}
}
void LED1(void *parg)//任務
{
GPIO_ResetBits(GPIOH,GPIO_Pin_11);
printf("點亮綠燈\n");
while(1)
{
while((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==KEY_ON))
{
GPIO_ToggleBits(GPIOH,GPIO_Pin_11);
rt_thread_delay(100);
}
}
}
void LED2(void *parg)//任務
{
GPIO_ResetBits(GPIOH,GPIO_Pin_12);
printf("點亮藍燈\n");
while(1)
{
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==KEY_ON)
{
GPIO_ToggleBits(GPIOH,GPIO_Pin_12);
rt_thread_delay(200);
}
}
}