0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【CW32移植Free-RTOS】CW32开发者扶持计划

二进制译码器 2023-04-18 09:38 次阅读

前言

1,Free-RTOS源码下载

  • 下载解压后检查文件是否齐全
  • 一定要有这个文件,后面的移植也主要用到这个文件

  • 进去后会有四个文件夹,案例,库,源文件,测试文件

2,建立文件夹

  • 文件夹新建在你的工程里,与User同级
  • 新建一个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,修改RTOS配置

#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;

}

工程下载链接:正在审核

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17123

    浏览量

    350978
  • RTOS
    +关注

    关注

    22

    文章

    811

    浏览量

    119593
  • 芯源
    +关注

    关注

    1

    文章

    13

    浏览量

    7998
  • 开发者
    +关注

    关注

    1

    文章

    563

    浏览量

    17005
  • CW32
    +关注

    关注

    1

    文章

    203

    浏览量

    626
  • 武汉芯源
    +关注

    关注

    1

    文章

    66

    浏览量

    253
收藏 人收藏

    评论

    相关推荐

    CW32快速开发入门

    CW32快速开发入门
    的头像 发表于 04-24 18:56 1947次阅读
    <b class='flag-5'>CW32</b>快速<b class='flag-5'>开发</b>入门

    CW32开发者扶持计划#CW32 #芯片

    CW32
    CW32生态社区
    发布于 :2023年05月24日 16:56:14

    CW32 MCU开发资料汇总(手册、工具、固件库)

    32L083_StdPeriph_Lib.zip4、CW32 MCU开发工具:*附件:CW-DAPLINK调试器驱动.zip*附件:CW-DAPLINK使用手册.pdf*附件:
    发表于 07-27 14:47

    开始报名!CW32开发者扶持计划正式进行,将助力中国的大学教育及人才培养

    才培养,建立以企业为主体、市场为导向、产学研深度融合的技术创新体系。2023年3月,武汉芯源半导体开发者扶持计划正式开始进行,以打造更为丰富的CW32生态社区。武汉芯源半导体
    发表于 03-14 10:28

    开发者扶持计划】教师、学生、工程师均可免费参与

    [CW32开发者扶持计划] 是CW32生态社区面向全球电子爱好、高校师生、工程师群体发出的一项
    发表于 04-27 12:10

    开发者扶持计划CW32-FreeRTOS

    cw32配置好的Free-rtos
    发表于 04-18 14:22 0次下载

    开始报名!CW32开发者扶持计划正式进行,将助力中国的大学教育及人才培养

    武汉芯源半导体积极参与推动中国的大学教育改革以及注重电子行业的人才培养,建立以企业为主体、市场为导向、产学研深度融合的技术创新体系。2023年3月,武汉芯源半导体开发者扶持计划正式开始进行,以打造更为丰富的
    的头像 发表于 03-14 11:35 599次阅读
    开始报名!<b class='flag-5'>CW32</b><b class='flag-5'>开发者</b><b class='flag-5'>扶持</b><b class='flag-5'>计划</b>正式进行,将助力中国的大学教育及人才培养

    cw32和stm32的区别

    cw32和stm32的区别 CW32和STM32是两种常见的单片机,被广泛应用于各种电子设备中。在本文中,我们将深入探讨CW32和STM32之间的区别和优劣势。 1. 硬件性能 硬件性能是衡量单片机
    的头像 发表于 08-16 11:15 4173次阅读

    cw32和gd32的区别

    cw32和gd32的区别 CW32和GD32是两种不同的芯片系列,分别由WCH和GigaDevice公司推出,两有很多不同之处,下面我们来详细介绍。 首先从CW32系列开始,
    的头像 发表于 08-16 11:15 1961次阅读

    基于CW32的无刷水泵方案

    基于CW32的无刷水泵方案
    的头像 发表于 11-03 17:28 859次阅读
    基于<b class='flag-5'>CW32</b>的无刷水泵方案

    基于CW32热敏电阻采集温度应用

    基于CW32热敏电阻采集温度应用
    的头像 发表于 10-25 16:45 535次阅读
    基于<b class='flag-5'>CW32</b>热敏电阻采集温度应用

    CW32 PWM输出功能介绍

    CW32 PWM输出功能介绍
    的头像 发表于 09-27 16:12 824次阅读
    <b class='flag-5'>CW32</b> PWM输出功能介绍

    CW32实时时钟(RTC)介绍

    CW32实时时钟(RTC)介绍
    的头像 发表于 10-24 15:36 1136次阅读
    <b class='flag-5'>CW32</b>实时时钟(RTC)介绍

    基于CW32的RC522刷卡模块的应用

    基于CW32的RC522刷卡模块的应用
    的头像 发表于 11-02 14:53 1108次阅读
    基于<b class='flag-5'>CW32</b>的RC522刷卡模块的应用

    基于CW32的物联网应用

    CW32】基于CW32的物联网应用
    的头像 发表于 11-02 15:55 783次阅读
    基于<b class='flag-5'>CW32</b>的物联网应用