一、开发板平台简介:
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"。
四、添加独立看门狗功能
1、添加初始化语句
(1)初始化看门狗时钟:启动用于给看门狗的内部40KHz的时钟
/********************************************
*函数名称:static void zyxc_irc40k_config(void)
*函数功能:初始化看门狗时钟
*备注:启动用于给看门狗的内部40KHz的时钟
********************************************/
static void zyxc_irc40k_config(void)
{
/* enable IRC40K */
rcu_osci_on(RCU_IRC40K);
/* wait till IRC40K is ready */
while(ERROR == rcu_osci_stab_wait(RCU_IRC40K));
}
(2)配置看门狗计时超时时间,定义1S超时。
备注:计算公式(单位:毫秒):看门狗单次计数时间 = 40K / 分频系数
//重装载值
#define WDGT_RELOAD_VALUE 156
//分频系数
#define WDGT_PRESCALER_DIV FWDGT_PSC_DIV256
/********************************************
*函数名称:void zyxc_wdgt_init(void)
*函数功能:配置看门狗
*备注:计算公式(单位:毫秒):看门狗单次计数时间 = 40K / 分频系数
1秒看门狗的设定
********************************************/
void zyxc_wdgt_init(void)
{
zyxc_irc40k_config(); //时钟初始化
fwdgt_config(WDGT_RELOAD_VALUE, WDGT_PRESCALER_DIV);
fwdgt_enable();
}
(3)编写定时喂狗的函数。
/********************************************
*函数名称:void zyxc_wdgt_feed(void)
*函数功能:配置看门狗
*备注:
********************************************/
void zyxc_wdgt_feed(void)
{
fwdgt_counter_reload();
}
(4)在zyxc_idle.c文件中,void zyxc_idle_thread_entry(void *parameter)空闲线程中进行初始化和喂狗。
五、配置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闪烁一次。
(4)如果去掉喂狗函数 zyxc_wdgt_feed(); 即可看到系统不断的复位,证明GD32F303RCT6开发板移植RT-Thread操作系统(添加idle空闲线程驱动独立看门狗)移植成功。
备注:如果系统不断重启,可以通过串口助手看到系统不断的打印复位信息,如下图所示。