青与鱼博客

@青与鱼

January 14th 2019 / 玩玩编程

stm32重定向printf到串口

首先需要包含#include<stdio.h>
然后初始化以下代码

#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
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//使用串口发送出去
 
  return ch;
}


以上在MDK中可以使用,但是在truestudio中不能正常工作,这时还需要一个东西


//ʹ重定向printf
#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE

{

  // 注意下面第一个参数是&huart1,因为cubemx配置了串口1自动生成的

  HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);

  return ch;

}

int _write(int file, char *ptr, int len)

{

      int DataIdx;

      for (DataIdx = 0; DataIdx < len;DataIdx++)

     {

           __io_putchar(*ptr++);

     }

      return len;

}

经过这样设置后,就能正常输出了,但是不能输出浮点数,需要另外设置,这样会增加10K的空间,我就没添加了

发表评论
已登录为 [退出]


皖ICP备16001584号-2
x
皖ICP备16001584号-2