最终解决方案
新建一个stm32_printf.h 头文件,在main.c 中include
#ifndef STM32_SPIDMA_MODE_STM32_PRINT_H
#define STM32_SPIDMA_MODE_STM32_PRINT_H
#include "stm32f1xx_hal.h"
#include "string.h"
extern UART_HandleTypeDef huart1;
void print_f(char* str){
HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), 1000);
}
#endif //STM32_SPIDMA_MODE_STM32_PRINT_H
使用自己定义的 print_f 注意!!!!不是 printf
无所谓,功能达到就行了,很稳定,比重定向什么好太多,不需要折腾,这个头文件还能方便共用,批量该函数名很容易,现在的IDE
之前各种搞都不行
比如
- https://www.cnblogs.com/xingboy/p/9522940.html中所提的
- 选上”Use MicroLIB”这是KEIL自带的一个简易的库
之前可以的
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
return ch;
}
这个之前我试过是可以的,这次不知道为什么不行,好像之前为了使用clion 调试,用什么程序修改了 microlib的模式。
最后说一句,STM32 最好还是在keil中编译,但是代母可以在clion中修改
其他参考
https://www.jianshu.com/p/0bd6ee925e1c