打印
[活动]

极海半导体-G32A1465开发板测评 01-RT-Thread工程模板创建与测试

[复制链接]
58|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lemonhub|  楼主 | 2025-1-4 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
极海半导体-G32A1465开发板测评 01-RT-Thread工程模板创建与测试G32A1465开发板简介
极海 G32A1465 评估板 支持 KEIL、IAR 等 IDE 集成开发环境,板上资源丰富可适配广泛的应用场景,包括串口接口、JTAG/SWD 接口、DC 12V 供电接口、CAN/LIN 收发器、RGB LED、电位计、复位按键等,符合 ISO 26262 功能安全 ASIL-B 设计规范。

G32A1465 评估板是 G32A1465 MCU 的完整演示和开发平台,搭载了一颗 G32A1465 MCU 芯片,该芯片基于 Arm® Cortex® M4 内核、工作主频 112MHz、 Flash 1024KB。
芯片系统框图


MCU主控板原理图


CAN 总线和 LIN 总线


其他部分的硬件原理图查看,参考《G32A1465 EVAL Board原理图 V1.0.SchDoc》.pdf

实物测试
拿到开发板默认是下载了RGB LED 循环闪烁。


SDK 介绍

SDK 包括
  • 板载驱动包 Boards 文件夹,如基本的 LED、 Button 及 COM 口的驱动等;
  • 多个必要的库 Libraries 文件夹,如 G32A1465 标准库、外设驱动库等;
  • 多个例程 Examples 文件夹,如 ADC采样、 CAN/CANFD 收发、 CRC校验等;
  • 中间件文件在 Middlewares 文件夹内,是 G32A1465 评估板提供的 demo 所使用到的第三方工具或源码;
  • 数据手册 Documents 文件夹,点击链接进入官网下载数据手册、原理图及用户手册等资料;
  • 设备包 Package 文件夹,用于安装 Keil 等 IDE 的设备包;
  • 此外还包含 G32A1xxx_SDK_um.chm 用户手册,便于查找 SDK 对应的部件说明和相关解决方案。
开发环境搭建
极海 Geehy 为开发者提供了十分友好的开发平台和编译环境,便于初学者上手测试,一般提供了KEIL和IAR两种常见的嵌入式开发环境。
以 Keil MDK IDE 作为编译软件,创建工程。默认已经安装 Keil MDK IDE 软件,
  • 下载 G32A1465_SDK 压缩包,双击安装 Package 文件夹中的 Geehy.G32A1xxx_DFP.1.0.1.pack Keil 设备支持包。

2. 创建工程模板,我们选择 G32A1465_SDK里面的Examples的工程模板作为基础。(一般拿到新开发板寻找GPIO案例作为测试基础,但是这个SDK里面,GPIO被命名成了PINS;本次测试我们以RTOS工程作为基础案例,然后一步步添加代码,完成测评)。

3. RTOS例程提供了FreeRTOS和RT-Thread-nano两个比较常见的嵌入式实时操作系统,本次实验以RT-Thread-Nano版本作为基础。
(后续尝试给移植RT-Thread标准版本,创建BSP)
RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。RT-Thread主要采用 C 语言编写,浅显易懂,且具有方便移植的特性(可快速移植到多种主流 MCU 及模组芯片上)。RT-Thread把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。RT-Thread完整版,通过在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,并且可以无缝地导入丰富的软件功能包,从而实现复杂功能。
RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于大量使用的 32 位 ARM 入门级 MCU 的场合。
下图是 RT-Thread Nano 的软件框图,包含支持的 CPU 架构与内核源码,还有可拆卸的 FinSH 组件:

4. 复制RT-Thread的Project工程文件到新创建的文件夹中,同时复制Boards、Libraries、Middlewares等文件夹。

复制RT-Thread文件夹到新文件夹中,同时修改文件夹命名。


5. 重构工程架构
Application 应用层控制代码
Boards 板级驱动代码
Libraries 芯片底层驱动代码
Middlewares 中间件代码
Project 工程文件
UserConfig 用户模块外设配置代码
ModuleDrivers 模块驱动代码

6. 重新配置工程文件与头文件
如果直接打开工程会发现缺少大量的文件,因为我修改了文件的路径,因此需要重新配置。

添加相关文件,修改之后效果


7. 工程结构
(工程结构根据个人习惯即可,下面的部分我已经做了一些修改,比如支持 log_printf 标准打印组件 支持彩色 、SEGGER_Printf 标准打印组件)
Application ——》main.c(主函数) g32a1xx_int.c(中断服务函数)
UserConfig 用户模块外设配置代码 (主要有芯片外设配置文件、rt-thread接口配置文件、finsh-port等
CmsisDrivers CMSIS底层驱动代码
BoardDrivers 板级驱动代码 board.c
PeriphDrivers 芯片底层标准库代码
Middlewares 中间件代码 (RT-Thread OSIF FINSH SEGGER-RTT)
ModuleDrivers 模块驱动代码



8. 编写程序
/*
*  极海半导体-Geehy-G32A146X开发板软硬件资料
    * Change Logs:
    * Date           Author       Notes
    * 2024-12-30      Coderend     mdk-template (log_printf)
    * 2024-12-31      Coderend     rt-thread +finsh         
*/
/* 包含头文件-----------------------------------------------------------------*/
#include "main.h"

/* 私有宏定义-----------------------------------------------------------------*/

/* 私有变量-------------------------------------------------------------------*/
static const char* tag = "main";

/** @addtogroup G32A1465_Examples
  @{
  */

/** @addtogroup RTOS_RT-Thread
  @{
  */

/** @defgroup RTOS_RT-Thread_Variables Variables
  @{
*/

static rt_thread_t led_thread = RT_NULL;

/**@} end of group RTOS_RT-Thread_Variables*/

/** @defgroup RTOS_RT-Thread_Functions Functions
  @{
  */

void led_thread_entry(void* parameter);

static void board_information_log(void)
{
        LOGI(tag,"Geehy-G32A1465 rt-thread finsh testing[ok]! \r\n");
        LOGI(tag,"Geehy-G32A1465 SEGGER-RTT testing[ok]! \r\n");
        LOGE(tag,"Geehy-G32A1465 by coderend 2024.12.30 testing[ok]! \r\n");
}
/*!
* [url=home.php?mod=space&uid=247401]@brief[/url]   Main function
*
* @param   None
*
* @retval  None
*/
int main(void)
{   
      /* 调用这句进行初始化以及打印开机信息【Demo start!】*/
      segger_rtt_init("Geehy-G32A1465-SEGGER-RTT-Tempalte [ok] \r\n");  
      board_information_log();
    /* Initialize LEDs */
    LED_Init();
    /* Create thread */
    led_thread = rt_thread_create("led1",
                               led_thread_entry,
                               RT_NULL,
                               256,
                               3,
                               20);

    /* Startup thread */
    rt_thread_startup(led_thread);
}

/*!
* [url=home.php?mod=space&uid=247401]@brief[/url]   LED thread entry function
*
* @param   parameter: the parameter of thread enter function
*
* @retval  None
*/
void led_thread_entry(void* parameter)
{
    while (1)
    {
        LED_Toggle(LED_GREEN);
                LOGI(tag,"LED_GREEN LED_Toggle \r\n");
        rt_thread_delay(1000);
              LED_Toggle(LED_RED);
              LOGI(tag,"LED_RED LED_Toggle \r\n");
              rt_thread_delay(1000);
              LED_Toggle(LED_BLUE);
                LOGI(tag,"LED_BLUE LED_Toggle \r\n");
              rt_thread_delay(1000);
    }
}

/**@} end of group RTOS_RT-Thread_Functions */
/**@} end of group RTOS_RT-Thread */
/**@} end of group Examples */

​具体完整代码见仓库代码。  https://gitee.com/End-ING/geehy-g32mcu-evaluation-board-note
9. 编译代码

10. 下载代码
板子支持JLINK下载,并提供了接口,因此本次实验使用JLINK下载,当然使用DAPlink同样可以,只要接上对应的接口。


注意问题:如果刚开始点击JLINK选项时,可能会弹出需要选择芯片的情况,但是jlink目前不支持这个芯片,出现这个情况的原因是选择了JATG模块,因此我们需要改成SW模式,才能出现ARM CoreSight SW-DP才能能够正常下载。


11. 下载程序完成之后,观察串口打印信息
msh组件显示RT-Thread版本

使用J-Link RTT Viewer 查看打印效果,一般用于板子没有多余串口的情况,SEGGER-RTT是一个强大的嵌入式调试组件

移植log_printf组件,标准打印组件,同时支持彩色,文件来源之前在APM32F407工程里面的,感觉十分好用就一直在用。








使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

71

帖子

0

粉丝