移植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);
}
}
}