本帖最后由 xld0932 于 2024-11-12 09:08 编辑
#申请原创# @21小跑堂
1、前言
“灵动·星”系列MM32高性能MCU产品,基于安谋科技(Arm China)Star-MC1内核(兼容 Cortex-M33),Armv8架构性能上比传统的Cortex-M3/M4提升了近 20%,其 4.02的Coremark跑分在Arm架构的MCU领域里名列前茅;最高工作频率可达300MHz,内置单精度浮点运算单元(FPU),支持DSP扩展,同时支持先进的L1 I-Cache & D-Cache,以及ITCM&DTCM,提供强劲的内核动力,在市场上同类型内核MCU产品中首屈一指。目前包含4个子系列: MM32F3,灵动·天枢MM32F5,灵动·玉衡MM32G5,灵动·天玑MM32H5,为用户提供灵活、丰富的选择。
2、J-Link接口
对于20PIN的标准接口,其定义多种兼容的工作模式,具备JTAG、SWD、VCOM、SPI、QSPI、SWO等等功能,具体的内容可以参考如下链接进行研读:https://wiki.segger.com/20-pin_J-Link_Connector
3、MM32H5480系列
MM32H5480微控制器搭载了由安谋科技授权的ARM®v8-M架构“星辰” STAR-MC1(兼容 Cortex®-M33)处理器,最高工作频率可达300MHz,性能可达4.02 CoreMark®/MHz,内置数字信号处理器(DSP)、浮点运算单元( FPU)和三角函数运算加速单元(CORDIC)辅助算法加速。本产品系列内置了多达2MB Flash,多达256KB SRAM,其中64KB支持ECC,多达4KB备份RAM,并集成了丰富的I/O端口和外设模块,包括3个3MSPS 12位的ADC,2个12位的DAC,4个模拟比较器,1个高精度可编程电压参考(SCVREF),3个16位高级定时器, 4个16位和2个32位通用定时器, 4个16位基础定时器,1个低功耗定时器,1个实时时钟(RTC),1个 QSPI和1个FMC接口用于存储扩展,还包含通信接口如2个I2C,3个SPI或I2S,7个USART, 1个低功耗UART,1个10/100M以太网控制器,1个集成了内部PHY的USB 2.0全速Device/Host控制器,1个集成了内部全速PHY和ULPI接口的USB 2.0 高速Device/Host控制器,1个SDIO接口和3个支持CAN-FD模式的FlexCAN接口。
MM32H5480微控制器还提供了一系列的安全配置,包括 AES-128、SHA-256、真随机数发生器(TRNG)、Flash访问保护功能和基于AES-128的Flash在线解密(OTFDEC)功能。MM32H5480的调试模式支持串行调试接口(SWD)、JTAG接口、TRACE接口。
4、MM32H5480通过UART与J-Link的VCOM功能实现日志打印
首先可以参考之前分享的《带你掌握通过J-Link下载SPI FLASH的4种方式》:https://bbs.21ic.com/icview-3366504-1-1.html?fromuser=xld0932将J-Link开始VCOM功能,需要注意的是在使用VCOM功能时,J-Link需要工作在SWD模式下,且VTref是需要有参考电压的;
在硬件连接上,我们需要将MM32H5480芯片UART的RX\TX引脚连接到J-Link的J-Link Tx和J-Link Rx引脚上,如下图所示:
最后通过代码实现UART串口初始化及配置,如下所示:
void PLATFORM_InitConsole(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_StructInit(&USART_InitStruct);
USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStruct);
RCC_AHBENRPeriphClockCmd(RCC_AHBENRPeriph_GPIOB, ENABLE);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_7);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStruct);
USART_Cmd(USART1, ENABLE);
}
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t)ch);
while (RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC))
{
}
return (ch);
}
硬件连接:
测试效果:我们通过串口工具来查看VCOM的输出打印日志信息:
5、MM32H5480通过SWD与J-Link的RTT功能实现日志打印
SWD接口除了能够实现对MCU的调试、下载功能之外,还可以借助SEGGER的RTT组件实现日志信息的打印功能,它的优点是不需要再MCU的UART引脚,利用下载引脚的复用功能实现模拟UART的功能,很大程度上节省了MCU的资源,又不影响其它的功能。
具体配置代码如下所示:
#include "SEGGER_RTT.h"
void PLATFORM_InitConsole(void)
{
SEGGER_RTT_ConfigUpBuffer(0, "RTTUP", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
}
int fputc(int ch, FILE *f)
{
SEGGER_RTT_PutCharSkip(0, (char)ch);
return (ch);
}
硬件连接:
测试效果:我们通过SEGGER RTT Viewer这个软件来查看SWD的输出打印日志信息:
在上述建立连接时,RTT Control Block选择的是Search Range,其后填入了对应的RAM起始位置和RAM空间大小,这是一种方式;还有另外一个方式如下所示:
就是在程序编译完成后,通过MAP文件找到SEGGER_RTT所在的RAM具体地址,然后在RTT Control Block中选择Address,并填写具体的RAM地址也可以,但为什么不选择Auto Detection选项呢,我也没太搞清,大概可能也许是没有自动检测到吧
6、MM32H5480通过TRACE与J-Link的SWO功能实现日志打印
通过MM32H5480的TRACE接口与J-Link的SWO实现日志打印输出与通过MM32H5480的UART接口与J-Link的VCOM实现日志打印输出的功能相似,在硬件资源上都需要占用MCU的引脚资源,但VCOM占用的是UART的两个引脚,而SWO仅占用一个SWO引脚,在软件上VCOM配置的UART,而SWO配置的是TRACE功能使能,以KEIL工程为例,具体如下:
工程配置:
首先我们通过上述图片的过程,进入如下的配置界面:
在Trace Settings界面中我们需要设置如下几个参数:
Core Clock时钟频率,这个需要与我们芯片配置的TPIU时钟,即TRACECLK时钟频率保持一致
Trace Port,这个需要选择Serial Wire Output - UART/NRZ
SWO Settings->Prescaler Core Clk这个是基于Core Clock来配置SWO的分频系数,最大的SWO取决于MCU和J-Link的能力;对于MM32H5480系列MCU来说,这边可以最大可以配置到7.5MHz,如果Prescaler这个值太小/SWO的频率太大,不支持的话,会有相应的提示窗口,如下所示,这时就需要我们修改这个分频值到一个合理的范围内:
软件配置:
volatile int32_t ITM_RxBuffer = ITM_RXBUFFER_EMPTY;
void PLATFORM_InitConsole(void)
{
DBG->CR &= ~(DBG_CR_TRACE_MODE_Msk | DBG_CR_TRACE_IOEN_Msk);
DBG->CR |= DBG_CR_TRACE_IOEN;
}
int fputc(int ch, FILE *f)
{
ITM_SendChar(ch);
return (ch);
}
测试效果:我们通过SEGGER J-Link SWO Viewer这个软件来查看SWO的输出打印日志信息:
7、附件工程
测试工程:
Project.zip
(1.07 MB)
|
三种不同方式实现J-Link下的日志打印功能,开发者可根据需求自行选择,大大提升灵活性。