(实测可用)GD32F303RCT6开发板移植RT-Thread操作系统(添加idle空闲线程点亮LED)

一、开发板平台简介:

1、开发板资源简介

(1)开发板主芯片型号:GD32F303RCT6

(2)开发板主芯片封装:LQFP-64_10x10x05P

(3)开发板主芯片内核:ARM® Cortex®-M4

(4)开发板主芯片主频:120MHz

(5)开发板主芯片Flash大小:256KB

(6)开发板主芯片RAM大小:48KB

2、Debug调试串口简介

        串口全称为串行通讯接口,即数据在通信线上一次传输一位,按先后一定顺序传输。我们通常所说的单片机串口准确来说应该是串行异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),使用TTL电平,串口需要RXD、TXD、GND三根线进行通信。

(1)我们选用的GD32F303RCT6开发板串口0已通过USB转TLL串口芯片CH340G引出,使用时,只需要用公对公USB线连接电脑即可(注意也得安装CH340G驱动)。

(2)开发板上的其他串口已通过排针引出,为TTL电平,通信的时候需要注意选择对应的电平模块,如USB转TTL串口模块等。

二、快速上手RT-Thread

1、选择合适的BSP

(1)我们这里选择GD32303E-EVAL BSP驱动进行移植。可通过如下参考链接下载bsp:

GD32303E-EVALhttps://github.com/RT-Thread/rt-thread/tree/master/bsp/gd32303e-eval

(2)下载上述bsp后就可以在开发板上进行移植尝试了。

2、移植BSP

        已下载的GD32303E-EVEL BSP工程文件,是使用 GD32F303ZET6 作为主控制器的,想要移植到我们的GD32F303RCT6开发板上,需要进行简单的修改,如下:

(1)找到gd32f303-bsp文件,并打开项目。

 (2)选择options for target-->选择GD32F303RC芯片。

(3)选择对应的下载器,我这里使用的是jlink ,并选择SWD下载模式。

(4) 设置Flash Download下载模式。

(5)那么接下来重点来了,直接下载的代码在GD32F303RCT6是无法运行的,因为GD32F303ZET6的RAM大小为64K,但是GD32F303RCT6的RAM大小为48K。此处需要在board.h头文件中把RAM大小(GD32_SRAM_SIZE)修改为48,如下所示:

 (6)修改后,重新编译下载,即可通过Debug串口看到打印的log信息。

三、添加IDLE空闲线程

1、新建线程并启动

在components.c文件中,找到rt_application_init(void)函数,并添加新建idle空闲的声明。

    rt_thread_t zyxc_idle_thread;
    zyxc_idle_thread=rt_thread_create("idle", zyxc_idle_thread_entry, RT_NULL,1024, 30, 20);	
//创建空闲线程
    if(zyxc_idle_thread!= RT_NULL)
    {
        rt_thread_startup(zyxc_idle_thread);
    }

2、编写空闲线程执行函数

(1)新建zyxc_idle.c并添加所需的头文件。

#include "zyxc_idle.h"
#include <rtthread.h>
#include "gd32f30x_gpio.h"

(2)新建zyxc_idle.c文件,并在其中编写空闲函数执行语句。其中该线程中 rt_thread_delay(5);即延时5个时钟tick(50ms),该空闲线程每隔20个tick闪烁一次LED1、LED2、LED3、LED4,即每隔1S闪烁一次LED。

/********************************************
*函数名称:void zyxc_idle_thread_entry(void *parameter)
*函数功能:空闲线程
*备注:用于看门狗、指示灯等空闲操作
********************************************/
void zyxc_idle_thread_entry(void *parameter)
{
    uint8_t idle_count=0;
    rcu_periph_clock_enable(RCU_GPIOC);																						//开启时钟
    gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);						//初始化LED1
		gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);						//初始化LED2
	  gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);						//初始化LED3
	  gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);						//初始化LED4
    while(1)
    {
        idle_count++;
        if(idle_count<=20)																												//每隔1S
        {
            gpio_bit_set(GPIOC,GPIO_PIN_0);																				//点亮1次
						gpio_bit_set(GPIOC,GPIO_PIN_1);																				//点亮1次
						gpio_bit_set(GPIOC,GPIO_PIN_2);																				//点亮1次
						gpio_bit_set(GPIOC,GPIO_PIN_3);																				//点亮1次
        }
        else if((idle_count>20)&&(idle_count<40))																	//每隔2S
        {
            gpio_bit_reset(GPIOC,GPIO_PIN_0);																		  //熄灭一次
						gpio_bit_reset(GPIOC,GPIO_PIN_1);																		  //熄灭一次
						gpio_bit_reset(GPIOC,GPIO_PIN_2);																		  //熄灭一次
						gpio_bit_reset(GPIOC,GPIO_PIN_3);																		  //熄灭一次
        }
        else
        {
            idle_count=0;																													//清零
        }

        rt_thread_delay(5);

    }
}

(3)新建zyxc_idle.h头文件并声明调用函数。

#ifndef __ZYXC_IDLE_H
#define __ZYXC_IDLE_H

void zyxc_idle_thread_entry(void *parameter);
#endif

(4)在components.c文件中包含头文件#include "zyxc_idle.h"。

四、配置KEIL软件下载选项

(1)点击“options for target”——Debug——Jlink/J-TRACE cortex(小编这里用到下载器是

GD32 Jlink OB下载器)——settings——选择SW看到右侧有Device Name即下载器找到了对应的GD32F303RCT6芯片。

 (2)选择Flash Download下载模式,这里端子了擦除整片芯片,以及下载程序后自动复位(Reset and run)。

 (3)下载完成后,即可看到GD32F303RCT6开发板上LED1、LED2、LED3、LED4每隔1S闪烁一次。即GD32F303RCT6开发板移植RT-Thread操作系统(添加idle空闲线程点亮LED)移植成功。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式ZYXC

谢爷的赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值