网站联系方式模板,大庆商城网站建设,建设网站需要具备什么条件,西峰住房和城乡建设局网站杂记#xff1a;STM32 调试信息打印实现方式 一、引言二、使用 USART 串口打印原理#xff08;二#xff09;实现步骤硬件连接代码实现 使用 ST - LINK 调试器 ITM 打印#xff08;一#xff09;原理#xff08;二#xff09;实现步骤硬件连接代码实现 四、使用 Semihos… 杂记STM32 调试信息打印实现方式 一、引言二、使用 USART 串口打印原理二实现步骤硬件连接代码实现 使用 ST - LINK 调试器 ITM 打印一原理二实现步骤硬件连接代码实现 四、使用 Semihosting 打印一原理二实现步骤硬件连接代码实现 五、对比USART1与STLINK调试器输出打印5.1 硬件依赖性5.2 适用场景5.3 性能5.4 使用方便性 一、引言
在 STM32 开发过程中调试信息打印是一种非常实用的调试手段。通过打印关键信息开发者可以实时了解程序的运行状态快速定位和解决问题。本文将介绍几种常见的 STM32 调试信息打印实现方式并给出相应的代码示例和图文说明。
二、使用 USART 串口打印
原理
USART通用同步异步收发传输器是 STM32 常用的通信接口通过配置 USART 并将调试信息以字符形式发送出去上位机如电脑使用串口调试助手接收并显示这些信息。
二实现步骤
硬件连接
将 STM32 开发板的 USART 引脚TX、RX通过 USB 转串口模块连接到电脑的 USB 接口。例如使用 STM32F103 系列通常 USART1 的 TX 为 PA9RX 为 PA10。
代码实现
#include stm32f1xx_hal.h
#include stdio.hUART_HandleTypeDef huart1;// 重定向 fputc 函数
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, HAL_MAX_DELAY);return ch;
}void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();while (1){printf(Hello, USART!\r\n);HAL_Delay(1000);}
}使用 ST - LINK 调试器 ITM 打印
一原理
ITMInstrumentation Trace Macrocell是 ARM Cortex - M 内核提供的一种调试功能通过 ST - LINK 调试器将调试信息从芯片传输到开发环境如 Keil MDK中显示。
二实现步骤
硬件连接
使用 ST - LINK 调试器通过 SWD 或 JTAG 接口连接 STM32 开发板。
代码实现
#include stm32f1xx_hal.h
#include stdio.h// 使能 ITM
#define ITM_Port8(n) (*((volatile unsigned char *)(0xE00000004*n)))
#define ITM_Port16(n) (*((volatile unsigned short*)(0xE00000004*n)))
#define ITM_Port32(n) (*((volatile unsigned long *)(0xE00000004*n)))
#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA 0x01000000int fputc(int ch, FILE *f)
{if (DEMCR TRCENA){while (ITM_Port32(0) 0);ITM_Port8(0) ch;}return(ch);
}void SystemClock_Config(void);
static void MX_GPIO_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();while (1){printf(Hello, ITM!\r\n);HAL_Delay(1000);}
}四、使用 Semihosting 打印
一原理
Semihosting 是 ARM 提供的一种机制允许运行在目标芯片上的代码与主机开发环境进行交互通过主机的标准输入输出设备进行调试信息的打印。
二实现步骤
硬件连接
使用 ST - LINK 调试器通过 SWD 或 JTAG 接口连接 STM32 开发板。
代码实现
配置半主机模式在Keil中可以通过以下步骤启用半主机模式
打开项目选项Project - Options for Target。在“Debug”选项卡中选择“Settings”。在“Semihosting”部分启用“Semihosting”选项。
#include stm32f1xx_hal.h
#include stdio.h// 重定向 fputc 函数
extern int __io_putchar(int ch);
int fputc(int ch, FILE *f)
{return __io_putchar(ch);
}void SystemClock_Config(void);
static void MX_GPIO_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();while (1){printf(Hello, Semihosting!\r\n);HAL_Delay(1000);}
}五、对比USART1与STLINK调试器输出打印
5.1 硬件依赖性
• USART1需要硬件串口支持需要连接串口线或USB转串口模块。 • STLINK不需要硬件串口但需要调试器支持半主机模式。
5.2 适用场景
• USART1适用于需要在目标硬件上直接查看调试信息的场景如嵌入式系统开发。• STLINK适用于需要在开发环境中查看调试信息的场景如调试阶段。
5.3 性能
• USART1性能较高适合大量数据输出。 • STLINK性能较低适合少量调试信息输出。
5.4 使用方便性
• USART1需要配置串口和重定向 printf 函数。 • STLINK配置简单直接使用 printf 函数即可。