GD32F103移植FreeRTOS

前言

GD32F103C8T6号称可以与STM32F103C8T6芯片完全兼容,PinToPin设计,STM32的程序几乎不用怎么修改便可以直接在芯片上运行。基于这个思路,可以参考STM32F103FreeRTOS的移植思路移植系统。

移植步骤

下载FreeRTOS源码

从FreeRTOS官网下载系统源码,官方地址为:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensionsxx

下载最新版本的源码,当前版本为202112.00

下载完成之后解压文件,得到以下文件 

 

文件夹内部的文件就不多做介绍了,大家有兴趣可以在网上查找相关的内容。

FreeRTOS源文件拷贝

工程新建FreeRTOS文件夹,用于存储源文件,接着将FreeRTOSv202112.00\FreeRTOS\Source文件夹内部的所有文件考到自己工程文件夹里。

拷贝完成

 打开portable文件夹,保留MemMangRVDS文件夹内容,其余删除。

由于GD32F103完全兼容STM32的程序,所以我们可以把使用STM32F103的配置文件,配置文件的路径为FreeRTOSv202112.00\FreeRTOS\Demo\CORTEX_STM32F103_Keil,如下图所示。

 将其拷贝至自己工程目录下,我放在了Include文件夹下面。

Keil工程添加FreeRTOS文件

添加FreeRTOS目录,添加源代码。

添加heap_4.c文件,文件路径为:\portable\MemMang

添加port.c文件,文件路径为\portable\RVDS\ARM_CM3

修改FreeRTOSConfig.h文件

将configCPU_CLOCK_HZ修改成108MHz,添加“#define INCLUDE_xTaskGetCurrentTaskHandle   1”配置。

将FreeRTOS端口中断处理程序映射到CMSIS标准名称的定义。 

修改gd32f10x_it.c文件

将SVC_Handler和PendSV_Handler这两个函数屏蔽,否则会出现重复定义。

在 gd32f10x_it.c文件头部添加xPortSysTickHandler函数声明。

 在SysTick_Handler函数内部调用xPortSysTickHandler函数。

添加Include文件

按照以上步骤,FreeRTOS移植完成了,接下来编写测试程序验证是否移植成功。

测试与验证

编写测试程序

#include <stdio.h>
#include "gd32f10x.h"
#include "systick.h"
#include "FreeRTOS.h"
#include "Task.h"


void LED_Init(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_AF);

    gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);
    
    gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_12);
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8);


    gpio_bit_reset(GPIOB, GPIO_PIN_4);
}

void LED_Ctrl(int value)
{
    if(value == 0)
	    gpio_bit_reset(GPIOA, GPIO_PIN_12);
	else if(value == 1)
		gpio_bit_set(GPIOA, GPIO_PIN_12);
			
}


void Task_Led1(void * pvParameters)
{
	while(1)
	{
		LED_Ctrl(0);	
		vTaskDelay(500);
		LED_Ctrl(1);	
		vTaskDelay(500);
	}
}
 
 

int main(void)
{
	nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
	LED_Init();
	
	xTaskCreate(Task_Led1,"TaskLed1",configMINIMAL_STACK_SIZE,NULL,2,NULL);
	vTaskStartScheduler();
	
	while(1){}
	
}

 通过程序可以验证LED按0.5S闪烁。

总结

GDF103系列芯片使用FreeRTOS进行单片机开发可以快速搭建搭建应用框架,专注应用层开发。希望我们国产芯片越做越强吧。

GD32官网:兆易创新

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要将STMF32103RCT6程序移植GD32F103RCT6上并使用FreeRTOS,需要进行以下几个步骤: 1. 修改频率:由于GD32F103STM32F103的主频可能不同,需要对代码中与时钟相关的部分进行相应的修改,以确保代码在新的目标芯片上能够正常运行。 2. 修改CAN通信:如果原始代码中使用了CAN通信,需要根据GD32F103的CAN接口的规格进行相应的修改,以适配新的芯片。 3. 修改内存地址:由于GD32F103STM32F103的内存地址分布可能不同,需要对代码中与内存地址相关的部分进行相应的修改,以确保代码可以正确访问内存。 4. 修改FLASH:如果原始代码中使用了对FLASH的操作,需要根据GD32F103的FLASH规格进行相应的修改,以适配新的芯片。 需要注意的是,UART、IIC、SPI等通信接口在GD32F103STM32F103之间是兼容的,因此不需要进行修改。 另外,在移植过程中,可以参考引用中提到的需要修改的四个方面,并且可以添加一个FreeRTOS的文件夹到GD32F103的工程目录中,具体可以参考引用。最后,确保对FreeRTOSConfig.h文件进行配置,可以参考引用中的建议。 通过以上步骤,就可以成功将STMF32103RCT6程序移植GD32F103RCT6上并使用FreeRTOS了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32F103RCT6程序移植GD32F103RCT6(HAL+RTOS)](https://download.csdn.net/download/Z_123_W/85167332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [GD32F103移植FreeRTOS](https://blog.csdn.net/mjwang/article/details/117629672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [FreeRTOS实验异常解决——FreeRTOS移植STM32F103实验LED灯不闪烁](https://blog.csdn.net/weixin_46545987/article/details/127558570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值