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

    文章

    16016

    浏览量

    343585
  • RTOS
    +关注

    关注

    20

    文章

    776

    浏览量

    118790
  • 芯源
    +关注

    关注

    1

    文章

    12

    浏览量

    7917
  • 开发者
    +关注

    关注

    1

    文章

    499

    浏览量

    16389
  • CW32
    +关注

    关注

    1

    文章

    122

    浏览量

    225
  • 武汉芯源
    +关注

    关注

    1

    文章

    57

    浏览量

    143
收藏 人收藏

    评论

    相关推荐

    CW32饭盒派开发板 测试IO速度

    CW32饭盒派开发板的GPIO进行速度测试
    的头像 发表于 05-26 13:07 42.5w次阅读
    <b class='flag-5'>CW32</b>饭盒派<b class='flag-5'>开发</b>板 测试IO速度

    CW32快速开发入门

    CW32快速开发入门
    的头像 发表于 04-24 18:56 781次阅读
    <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和stm32的区别

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

    基于CW32的无刷水泵方案

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

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

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

    CW32 PWM输出功能介绍

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

    CW32实时时钟(RTC)介绍

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

    2023电赛A题国奖CW32 开源分享

    电赛A题开源分享,主控为CW32
    的头像 发表于 11-02 10:16 782次阅读
    2023电赛A题国奖<b class='flag-5'>CW32</b> 开源分享

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

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

    基于CW32的物联网应用

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