使用clion进行STM32开发的串口重定向实现
摘要: 本文介绍了在CLion开发STM32时实现printf串口重定向并支持浮点数打印的方法。首先通过CMake配置启用硬件浮点运算(-mfpu=fpv4-sp-d16)和浮点ABI(-mfloat-abi=hard),并添加-u _printf_float链接选项以支持浮点输出。其次通过重写__io_putchar或fputc函数,将输出重定向到指定串口(如huart1)。配置完成后可直接使用
·
引言
本文章介绍了如何在CLion进行STM32开发下,使用printf函数支持串口重定向,以及支持打印浮点数。通过合理的CMake配置和代码实现,我们可以让STM32项目具备完整的printf调试功能。众所周知printf是在个人PC机上将输出打印在终端和屏幕上,在单片机上使用printf进行输出,则就是使用串口代替终端和屏幕进行类似的输出。
1. CMake配置
在项目的CMakeLists.txt文件中添加以下配置:
# 开启硬件浮点运算
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=fpv4-sp-d16 -mfloat-abi=hard")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=fpv4-sp-d16 -mfloat-abi=hard")
# 使能printf相关函数支持浮点数
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE -u _printf_float)
配置说明:
- 硬件浮点运算:
-mfpu=fpv4-sp-d16指定使用STM32F4的硬件浮点单元,-mfloat-abi=hard启用硬件浮点ABI(这里博主使用的是F4的芯片,使用其他芯片可询问AI) - 浮点数打印支持:
-u _printf_float强制链接器包含printf的浮点数处理代码
2. printf串口重定向实现
在你的串口的头文件中添加以下代码:
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *) &ch, 1, 0xFFFF);//修改为对应的串口
return ch;
}
代码说明:
- 编译器兼容性:针对GCC和其他编译器使用不同的函数名
- UART选择:示例使用
huart1,请根据实际项目修改 - 超时设置:
0xFFFF提供足够的传输超时时间
3. 使用示例
配置完成后,你可以在代码中直接使用printf进行调试:
int main(void)
{
HAL_Init();
SystemClock_Config();
// 初始化USART1(确保与重定向中使用的UART一致)
MX_USART1_UART_Init();
// 测试整数打印
printf("Hello STM32!\r\n");
printf("Integer: %d\r\n", 12345);
// 测试浮点数打印
float temperature = 25.67f;
double precision_val = 3.1415926;
printf("Temperature: %.2f°C\r\n", temperature);
printf("Pi value: %.6lf\r\n", precision_val);
while (1)
{
// 主循环
HAL_Delay(1000);
printf("Running time: %lu ms\r\n", HAL_GetTick());
}
}
更多推荐



所有评论(0)