移植RTT到STM32

移植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);
		}
	}
}
发布了13 篇原创文章 · 获赞 19 · 访问量 1815

猜你喜欢

转载自blog.csdn.net/qq_44622367/article/details/102649973
今日推荐