【CW32移植Free-RTOS】

前言

移植完成的工程在文末提供了下载链接;
不需要看过程可直接下载;
使用的板子是CW32F030C8T6小蓝板,最终效果是点亮板载的PC13的小灯。

1,Free-RTOS 源码下载

RTOS下载链接
点击Get Updates ;等待一会就自动下载了。
在这里插入图片描述

解压后检查文件是否齐全

  • 一定要有这个文件,后面的移植也主要用到这个文件。
    在这里插入图片描述
  • 进去后会有四个文件夹,案例,库,源文件,测试文件
    在这里插入图片描述

2,建立文件夹

  • 新建一个RTOS文件夹,并添加 include protable source

在这里插入图片描述

3,copy系统源码进入新文件夹

  • FreeRTOS\Source\include :这个文件路径里的所有 .h 文件复制进新建的 include文件夹中。
    移动后
  • FreeRTOS\Demo 这个路径中寻找到关于STM32F1 系列的Keil文件

在这里插入图片描述

  • 在该路径中寻找到FreeRTOSConfig.h的文件,并将他复制进之前新建的include的文件夹中

在这里插入图片描述

  • FreeRTOS\Source\portable\MemMang 路径下寻找到heap文件,并将™全部复制进新建的peotable文件中

在这里插入图片描述

  • reeRTOS\Source\portable\RVDS\ARM_CM0 该路径下寻找到port文件,复制进新建的portble文件中。

在这里插入图片描述

  • 将在该路径下出现的**.c文件都移动进source文件夹内。**
    移动后的效果
    在这里插入图片描述

4,keil工程设置

  • 下面是需要新建的组,以及添加的文件。
  • RTOS/source
  • RTOS/port

在这里插入图片描述

在这里插入图片描述

5,添加工程路径

选择将 RTOS下的source路径添加入内。

在这里插入图片描述

6,配置修改

  • FreeRTOSConfig.h下修改以下内容:
#define INCLUDE_xTaskGetCurrentTaskHandle 1

#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler	SVC_Handler
//#define	xPortSysTickHandler	SysTick_Handler



#define configUSE_PREEMPTION		1
#define configUSE_IDLE_HOOK			0
#define configUSE_TICK_HOOK			0
#define configCPU_CLOCK_HZ			( ( unsigned long ) 48000000 )	
#define configTICK_RATE_HZ			( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES		( 5 )
#define configMINIMAL_STACK_SIZE	( ( unsigned short ) 128 )
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 4 * 1024 ) )
#define configMAX_TASK_NAME_LEN		( 16 )
#define configUSE_TRACE_FACILITY	0
#define configUSE_16_BIT_TICKS		0
#define configIDLE_SHOULD_YIELD		1
  • 在中断文件interrupt_cw32f030.c 内屏蔽以下函数,并添加:
  • 头文件
#include "main.h"
#include "interrupts_cw32f030.h"
#include "cw32f030_gpio.h"
#include "cw32f030_adc.h"
#include "cw32f030_gtim.h"
#include "FreeRTOS.h"
#include "task.h"
  • SysTick_Handler(void)
void SysTick_Handler(void)
{
	#if (INCLUDE_xTaskGetSchedulerState)
		if(xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
		{
	#endif 
			xPortSysTickHandler();
	#if (INCLUDE_xTaskGetSchedulerState)
		}
		#endif
}
  • 屏蔽以下两个函数

在这里插入图片描述

7,测试代码

注意:因为CW32F030.h内可以没有包含管脚等的.h文件,因此新建了一个mian.h 文件

**文件main.h**
#ifndef __MAIN_H
#define __MAIN_H


#include "base_types.h"
#include "cw32f030.h"
#include "system_cw32f030.h"
#include "interrupts_cw32f030.h"
#include "cw32f030_gpio.h"
#include "cw32f030_rcc.h"
#include "cw32f030_systick.h"
#include "interrupts_cw32f030.h"
#include "system_cw32f030.h"



#endif /* __MAIN_H */
** 文件main.c**
#include "CW32F030.h"                   // Device header
#include "FreeRTOS.h"
#include "main.h"
#include "task.h"
#include "queue.h"

//code 代码空间 ro-data 常量空间 rw-data 已全局变量 zi-data 未全局变量等
//**********************************
//		 宏定义
#define LED_TASK_NVIC		2				//任务优先级
#define LED_TASK_Size  	50				//任务堆栈大小
TaskHandle_t LED_Task_Handler;		//句柄

//*******************************
//			函数申明
void LED_task(void *pvParameters);




void LED_init()
{
    GPIO_InitTypeDef GPIO_InitStruct;
		__RCC_GPIOC_CLK_ENABLE();
		PC13_AFx_GPIO();
		
		GPIO_InitStruct.IT = GPIO_IT_NONE;			//控制脚初始化
		GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
		GPIO_InitStruct.Pins = GPIO_PIN_13;
		GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
		GPIO_Init(CW_GPIOC, &GPIO_InitStruct);

}


void LED1(void *pvParameters)
{
   int i;
	
    while(1)
    {
        PC13_SETLOW();
			  vTaskDelay(100);
				PC13_SETHIGH();
				vTaskDelay(100);
    }
}


int main()
{
	
	  LED_init();
		PC13_SETLOW();
    xTaskCreate(LED1, "LED1", 128, NULL, 1, &LED_Task_Handler);
    /* 启动调度器 */
    vTaskStartScheduler();
    /* 如果程序运行到了这里就表示出错了, 一般是内存不足 */
    return 0;

}

下载:CW32/RTOS

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值