发新帖本帖赏金 30.00元(功能说明)我要提问
12下一页
返回列表
打印
[G32A]

G32A1465 Keil快速建立工程并RTTView输出日志

[复制链接]
1431|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
泡泡无敌1111|  楼主 | 2024-12-21 00:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上申请的Greey车规级MCU G321465开发板终于收到了,之前供应商帮忙申请,反馈确实不好申请,之前公司用的APM32E103系列用于替代ST的103系列,从样板到上千的批量得到产品验证,因为产品是从0到1全过程参与,因此比较有很深的心得,不仅硬件上兼容,软件上也同样兼容,大大减少了开发周期和验证测试周期。以前用过其他家的国产MCU方案,硬件上号称pin to pin兼容,但是软件上并不是这样的,开发和移植起来比较费劲,或多或少都是有不少坑。
言归正传,拿到G321465开发板后,官网上下载对应评估板的原理图和说明书资料,了解外设资源,因为之前供应商给过SDK开发包,于是用keil开始从搭建一个完整的软件工程。
第1步:安装PACK工具
在Keil 上安装G321465的PACK工具,这个直接在官方的SDK文件夹中选择Geehy.G32A1xxx_DFP.1.0.1进行安装,前提是安装好Keil IDE,顺便提醒以下Keil个人使用,商业应用还是建议使用正版工具。
第2步:创建工程目录文件夹
说明:
App文件夹下主要是应用层的文件;
BSP文件下主要是外设驱动文件;
Common文件夹下是通用共用的文件;
FreeRTOS文件夹下是RTOS的源码文件;
G32A1XXX_SDK文件夹是G32A1XXX的官方标准SDK文件;
Middlewares文件夹是G32A的一些中间件文件;
Project文件夹是工程的文件;
RTT_LOG文件夹是RTT日志打印的文件,免去串口助手,方便调试;
TaskApp文件夹是应用层的任务文件;
Keilkill是脚本文件,主要用于删除编译过程产生的中间文件,便于Gitlab提交管理;
第3部分:Keil创建工程,添加GROUP和文件路径


备注:
这么预留的FreeRTOS的文件目录,暂时没有添加,这里打算用一个ThreadX的操作进行移植,后续添加。
初次编译,如果弹出如下错误:请修改Linker文件,不使用默认的,直接找到SDK中的进行加载即可




配置好产生bin文件的脚本命令,其实这里可以自己增加一个自定义脚本,例如增加bin文件的版本信息、校验信息CRC32和MD5等,
$K\ARM\ARMCLANG\bin\fromelf.exe --bin--output $L@L.bin [url=mailto:$L@L.axf]$L@L.axf[/url]
这里采用ARMCLANG 而且是相对路径,这比网上其他的很多是绝对路径好很多,因为在实际项目中多人使用一个工程共同开发,安装路径不同,带来不少麻烦。


接着配置好系统时钟、配置好GPIO输出、RTT初始化、这样一个可用的工程就创建好了。
接下来配置J-Link RTT Viewer选择G32A1465芯片即可,然后选择SWD,地址自动识别,Jlink就可以不仅实现下载,还能输出日志调试。





使用特权

评论回复

打赏榜单

21ic小管家 打赏了 30.00 元 2025-01-21
理由:优质评测

沙发
WhisperingTrees| | 2024-12-22 20:51 | 只看该作者
为啥很多都喜欢用脚本调试啊,直接用编译器不是更方便吗

使用特权

评论回复
板凳
泡泡无敌1111|  楼主 | 2024-12-24 11:21 | 只看该作者
WhisperingTrees 发表于 2024-12-22 20:51
为啥很多都喜欢用脚本调试啊,直接用编译器不是更方便吗

一看就是从事嵌入式项目开发时间不长,而且开发项目相对简单的,没有从事网络4G\WIFI\ETH的https TLS加密 、远程OTA批量下载的经验的才会这样问。

使用特权

评论回复
地板
丙丁先生| | 2025-1-8 13:36 | 只看该作者
只能用Jlink吗?试了J8、stlink、daplink、wchdaplink都用不了啊?无论是SWD/SCK还是RXD/TXD,为什么?

使用特权

评论回复
5
盗铃何须掩耳| | 2025-1-8 16:58 | 只看该作者
泡泡无敌1111 发表于 2024-12-24 11:21
一看就是从事嵌入式项目开发时间不长,而且开发项目相对简单的,没有从事网络4G\WIFI\ETH的https TLS加密 ...

我也准备问为啥用脚本的,因为我也没从事过无线通信开发,感谢解惑

使用特权

评论回复
6
RTT Viewer窗口打印的字符是通过什么函数输出的

使用特权

评论回复
7
TimeRiddle| | 2025-1-9 17:42 | 只看该作者
学习一下RTT Viewer的使用。

使用特权

评论回复
8
51xlf| | 2025-2-4 16:20 | 只看该作者
装的 Pack 版本要和芯片实际情况相匹配,版本过旧可能缺少必要的驱动和配置文件,版本过新则可能存在兼容性问题。

使用特权

评论回复
9
iyoum| | 2025-2-4 17:59 | 只看该作者
在代码中,使用SEGGER_RTT_printf()或其他RTT提供的函数来代替传统的printf函数,将数据发送到RTT Viewer。

使用特权

评论回复
10
updownq| | 2025-2-4 19:07 | 只看该作者
在代码中添加必要的错误处理代码,当 RTT 初始化或日志输出出现错误时,能够及时输出错误信息,方便调试和排查问题。

使用特权

评论回复
11
hilahope| | 2025-2-4 22:30 | 只看该作者
目标板的电源稳定,避免因电源问题导致的日志输出不稳定。

使用特权

评论回复
12
pmp| | 2025-2-5 08:06 | 只看该作者
在工程设置中配置串口参数,包括波特率、数据位、停止位等。

使用特权

评论回复
13
jonas222| | 2025-2-5 08:35 | 只看该作者
RTT缓冲区大小足够,避免日志信息丢失。可以在初始化时调整缓冲区大小

使用特权

评论回复
14
abotomson| | 2025-2-5 10:15 | 只看该作者
正确配置J-Link RTT Viewer,以便能够通过SWD接口与单片机通信,并输出日志调试信息。

使用特权

评论回复
15
sanfuzi| | 2025-2-5 11:46 | 只看该作者
在输出日志时,应选择合适的日志等级(如debug、info、warn、error),并避免输出无意义的日志或不携带上下文信息的日志。

使用特权

评论回复
16
abotomson| | 2025-2-5 12:47 | 只看该作者
在程序代码中包含SEGGER_RTT.h头文件,并调用SEGGER_RTT_Init()函数来初始化RTT系统。

使用特权

评论回复
17
dspmana| | 2025-2-5 14:15 | 只看该作者
在代码中适当位置调用 RTT 初始化函数,并进行必要的配置,如缓冲区大小、通道号等。注意不要在中断或频繁调用的函数中使用 RTT,以免影响系统性能和日志输出的完整性。

使用特权

评论回复
18
wengh2016| | 2025-2-5 14:45 | 只看该作者
在主程序中初始化RTT,通常在系统初始化阶段进行。

使用特权

评论回复
19
lihuami| | 2025-2-5 15:44 | 只看该作者
选择合适的调试器(如 J-Link、ST-Link 等),并配置好调试器的参数,如接口类型、时钟频率等,确保能够正常连接芯片进行调试。

使用特权

评论回复
20
albertaabbot| | 2025-2-5 16:37 | 只看该作者
合理设置工程的头文件包含路径,要把芯片的标准外设库头文件、RTT(Real Time Transfer)相关头文件等所在目录添加到工程的包含路径中,这样 Keil 编译时才能找到所需的头文件。

使用特权

评论回复
发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝