• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32串口prinrf的问题

lygo 2017-08-18 浏览量:1334

最近学习nucleo板子,学习到串口的时候发现加上这下面这句话就能实现串口printf打印数据了?百度说是fputc里面的输出指向串口(重定向),这句话不是很理解,望大佬讲解?。还有

__GNUC__ 这个在下面起啥作用呢?只知道是GNU 编译器的预定义宏。希望大佬详细的回答下,谢谢!

,/* USER CODE BEGIN 1 *

#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;

}

还有为啥用的是这个HAL_UART_Transmit函数,其他的不能代替吗?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • fputc这句是重定义printf函数的实现方式,不一定是串口输出,也可以是lcd显示,其实严格意义上讲printf只是外设用于格式化输出的一种手段,不管是啥外设都能用。
    • 发布于 2017-08-18
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • HAL_UART_Transmit()是STM HAL库函数中的API,功能就是把printf里的数据发送给串口。


    HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);​


    • 发布于2017-08-18
    • 举报
    • 评论 0
    • 3
    • 0

  • 重定向簡單來說就是將weak的function讓您重新定義並指向

    因MCU並沒有標準輸出的設備(stdout),所以默許定義是weak的

    當您呼叫printf時候,會呼叫fput來處理字元到輸出哪個設備,導向uart的過程叫做重定向,當然您也可以當作是override的概念

    然後要做的是就是由UART送出字元,所以使用HAL_UART_Transmit

    以上


    • 发布于2017-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 是滴,是重定向了,重定向到了UART1的TX。
    • 发布于2017-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 最重要的就是这一句:HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

    实际上前面部分的功能就是把printf的功能映射到UART口,结果就是输出函数的内容发送到了UART口打印出来了。

    • 发布于2017-08-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 也不是说一定要用printf函数,也可以自己写。使用标准C库中的函数,就要重新修改该函数的具体实现,这样才能用于你的单片机。标准库中的函数都有一个默认的函数实体,但是当你写了一个与之函数名一致的函数,编译器会放弃默认,选择使用你的函数
    • 发布于2017-08-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 其实要的是那个transmit那句,那句决定的是你用的哪个uart口作为输出串口,一般的stm32有多个串口。

    fputc那句没用,可以不要

    • 发布于2017-08-18
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32串口prinrf的问题