前言
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文件夹,保留MemMang,RVDS文件夹内容,其余删除。
由于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官网:兆易创新