1、重定向(usart.c的USER CODE BEGIN 1下面)

#include <stdio.h>
int fputc(int ch, FILE *file)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
  return ch;
}

2、使用互斥量保护printf输出

#include <stdio.h>
#include <stdarg.h> //必要的头文件

void safe_printf(const char *format, ...);//申明函数

void safe_printf(const char *format, ...) {
    va_list args;
    // 获取互斥量(等待最多100ms)
    if (osMutexAcquire(printfMutexHandle, osWaitForever)== osOK) {
        va_start(args, format);
        vprintf(format, args);  // 底层输出函数
        va_end(args);
       osMutexRelease(printfMutexHandle);  // 释放互斥量
    }
}
/*任务里实验一下*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
		safe_printf("1");
		//printf("1");
    osDelay(1);
  }
  /* USER CODE END StartDefaultTask */
}

3、勾选微库编译

4、串口输出打印

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐