前言
- 感谢由芯源半导体提供的物料与技术支持
- CW32是武汉芯源半导体生产的高性能低成本MCU,欢迎大家多多使用***,支持国产!!!
- 开发者扶持计划由CW32生态社区与立创EDA共同合作发起,更多详细内容:开发者扶持计划-电子发烧友站内搜索 (elecfans.com)
- 本次移植使用的硬件为官方CW32F030小蓝板,最终效果为点亮PC13的LED
1,Free-RTOS源码下载
- Free-RTOS源码链接
- 进入后点击 Get Updates;等待一会就自动下载了
- 下载解压后检查文件是否齐全
- 一定要有这个文件,后面的移植也主要用到这个文件
- 进去后会有四个文件夹,案例,库,源文件,测试文件
2,建立文件夹
- 文件夹新建在你的工程里,与User同级
- 新建一个RTOS文件夹,并添加 include protable source
3,copy系统源码进入新建的工程文件
- 一,FreeRTOS\\Source\\include :这个文件路径里的所有 .h 文件复制进 新建的include文件夹中。**
- 三,在该路径中寻找到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
+关注
关注
146文章
17123浏览量
350978 -
RTOS
+关注
关注
22文章
811浏览量
119593 -
芯源
+关注
关注
1文章
13浏览量
7998 -
开发者
+关注
关注
1文章
563浏览量
17005 -
CW32
+关注
关注
1文章
203浏览量
626 -
武汉芯源
+关注
关注
1文章
66浏览量
253
发布评论请先 登录
相关推荐
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开发者扶持计划正式进行,将助力中国的大学教育及人才培养
武汉芯源半导体积极参与推动中国的大学教育改革以及注重电子行业的人才培养,建立以企业为主体、市场为导向、产学研深度融合的技术创新体系。2023年3月,武汉芯源半导体开发者扶持计划正式开始进行,以打造更为丰富的
cw32和stm32的区别
cw32和stm32的区别 CW32和STM32是两种常见的单片机,被广泛应用于各种电子设备中。在本文中,我们将深入探讨CW32和STM32之间的区别和优劣势。 1. 硬件性能 硬件性能是衡量单片机
cw32和gd32的区别
cw32和gd32的区别 CW32和GD32是两种不同的芯片系列,分别由WCH和GigaDevice公司推出,两者有很多不同之处,下面我们来详细介绍。 首先从CW32系列开始,
评论