极海半导体-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工程里面的,感觉十分好用就一直在用。
|