@[TOC]STM32使用printf调试工程基于HAL库
STM32使用printf调试工程基于HAL库
使用uart发送调试信息
1.首先在cubemax中配置相关的引脚
2.正常情况我们可以直接利用uart进行打印
例如:HAL_UART_Transmit(&huart1,“aaa”, sizeof("aaa"), 0xFFFF);
使用stdio.h重定向printf函数
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE __weak int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE __weak int fputc(int ch, FILE *f)
#endif
extern UART_HandleTypeDef huart1;
PUTCHAR_PROTOTYPE {
HAL_UART_Transmit(&huart1, (uint8_t *) &ch, 1, 0xFFFF);
return ch;
}
此时如果在一个文件的开头,我们添加这块代码,那么就可以使用pirntf函数了,但是其他文件无法调用这个东西
将printf重定向塞进头文件中
#ifndef TEST2_DEBUG_H
#define TEST2_DEBUG_H
#include "stm32f1xx_hal.h"
#include "stdio.h"
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE __weak int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE __weak int fputc(int ch, FILE *f)
#endif
extern UART_HandleTypeDef huart1;
PUTCHAR_PROTOTYPE {
HAL_UART_Transmit(&huart1, (uint8_t *) &ch, 1, 0xFFFF);
return ch;
}
#endif //TEST2_DEBUG_H
这里我们对网上的重定向写法做一些修改,将其函数声明称__weak类型,这样可以防止函数的重复加载,进而可以使得这段代码能够写在头文件中