【STM32F1例程5】RT-THREAD实验

解释说明

这个概念还是想唠叨一下(个人总结,仅供参考)!!!RT-Thread是一个开源的、中英文双语的、面向嵌入式系统领域的实时操作系统(RTOS)。它具备以下特点:

1.轻量级:RT-Thread的内核非常小,整个内核的代码量不足3K,可以运行在各种资源受限的嵌入式硬件上。
2.可伸缩性:RT-Thread可以运行在从几百字节内存的8051到大型的ARM7以及更高性能的处理器上。
3.实时性:作为一个实时操作系统,RT-Thread提供了丰富的内核对象,如信号量、互斥锁、事件等,支持高实时性的应用需求。
4.组件丰富:RT-Thread提供了一套完整的组件管理机制,可以方便地添加或移除组件,以适应不同的项目需求。
5.良好的软件生态:RT-Thread拥有丰富的软件包,包括文件系统、TCP/IP协议栈、设备驱动框架等,便于开发者扩展功能。
6.社区活跃:RT-Thread有一个活跃的社区,开发者可以在这里获取帮助、分享经验和下载资源。

 RT-Thread实验的目的:
1.可以辅助理解操作系统原理:通过实验加深对实时操作系统原理的理解。
2.掌握RT-Thread使用:学习如何在项目中使用RT-Thread,包括内核移植、组件配置和使用。
3.嵌入式编程实践:通过编写和管理线程、使用内核对象等,提高嵌入式编程能力。
4.硬件接口操作:学习如何通过RT-Thread操作硬件接口,如GPIO、UART等。
5.软件项目管理:通过实验学习如何使用RT-Thread的包管理工具BSP(Board SupportPackage)进行项目管理。

RT-Thread实验的常见内容:
1.内核移植实验:将RT-Thread移植到不同的硬件平台上。
2.线程创建和管理:学习如何在RT-Thread中创建和管理线程。
3.同步机制实验:使用信号量、互斥锁等内核对象实现线程间的同步。
4.通信机制实验:使用邮箱、消息队列等实现线程间的通信。
5.内存管理实验:学习RT-Thread的内存管理机制,如动态内存分配和内存池的使用。
6.设备驱动实验:学习如何编写和使用设备驱动,控制硬件设备。
7.文件系统实验:了解RT-Thread的文件系统,学习文件操作。
8.网络编程实验:使用RT-Thread的TCP/IP协议栈进行网络编程。

实验内容

1.接线:
      无需连外部杜邦线
2.实验:
      用STLINK 下载程序,全速运行之后,可以看到线程 1:点亮 LED,线程 2:熄灭 LED 灯,从而能看到 LED 灯闪烁。

老样子,先给个main.c代码

#include "main.h"
#include "rtthread.h"

#define RT_LED1_THREAD_PRIORITY       (RT_THREAD_PRIORITY_MAX / 4)//优先级
#define RT_LED2_THREAD_PRIORITY       (RT_THREAD_PRIORITY_MAX / 5)

//LED任务1 LED亮
void LED1Main(void *parameter)
{
	while(1)
	{
			rt_thread_delay(200);//等待200ms
			GPIO_ResetBits(GPIOB,GPIO_Pin_4);//PB4输出低
	}
}
//LED任务2 LED灭
void LED2Main(void *parameter)
{
	while(1)
	{
		rt_thread_delay(50);//等待50ms
		GPIO_SetBits(GPIOB,GPIO_Pin_4);//PB4输出高
	}
}
//LED 初始化PB4
void GPIO_Config_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能PB端口时钟使能
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 //PB4 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB4
 GPIO_ResetBits(GPIOB,GPIO_Pin_4);						  //PB4 输出低
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //全功能SW+JTAG,禁用JTRST,PB4可用
	
}
//主函数,采用外部8M晶振,72M系统主频,可以在void SetSysClock(void)函数中选择主频率设置
int main(void)
{	
	 rt_thread_t tid;
	GPIO_Config_Init();	//初始化GPIO,PB4配置成推挽输出
	tid=rt_thread_create("LED1Main", LED1Main, RT_NULL,
												 RT_MAIN_THREAD_STACK_SIZE, RT_LED1_THREAD_PRIORITY, 20);//创建任务1,堆栈大小1024
	rt_thread_startup(tid); //启动任务1
	tid=rt_thread_create("LED2Main", LED2Main, RT_NULL,
												 RT_MAIN_THREAD_STACK_SIZE, RT_LED2_THREAD_PRIORITY, 20);//创建任务2,堆栈大小1024
	rt_thread_startup(tid); //启动任务2
   
	while(1)
	{
		rt_thread_delay(1* RT_TICK_PER_SECOND);//等待1000ms
	}
}


老规矩,因为注释相对详细,所以就不过多成篇解释,大家慢慢去理解哦

这个实验呢,就把完整的工程给大家,希望对大家有帮助!!!

还是日常结尾鼓励,希望大家实验顺利哦!!!!

你可能感兴趣的:(嵌入式开发,stm32,嵌入式硬件,单片机)