STM32入门基础篇(十二)

(十二)printf 与重定向

1.释义

printf函数默认输出设备是显示器,如果要实现在串口或者LCD上显示,必须重定义标准库函数里调用的与输出设备相关的函数。比如使用printf输出到串口,需要将fputc里面的输出指向串口,这一过程就叫重定向。

2.应用方法

  1. fputc 函数
    标注库(STD库)使用程序如下:

    int fputc(int ch,FILE *p)  //函数默认的,在使用printf函数时自动调用
    {
    	USART_SendData(USART1,(u8)ch);	//串口号应注意修改
    	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
    	return ch;
    }
    

    HAL库使用程序如下:
    c int fputc(int ch,FILE *f) { uint8_t temp[1]={ch}; HAL_UART_Transmit(&huart1,(uint8_t *)&temp,1,1000); HAL_Delay(2); return ch; }

    注:
    • 该函数放置在串口的配置文件中,可以放置在串口初始化配置函数前。
    • 在对应的头文件中添加如下,绝对不能在usart.c文件中添加,否则会有警告,必须要在usart.h中添加(HAL库可以添加在c文件中)
      #include "stdio.h" //如果缺少此行,FILE无法使用
      
    • 在Target设置中勾选USE MicroLIB
    • printf函数尽量不要放在任何中断服务函数中使用,避免出现不必要的麻烦

      • 在学习此部分时,看到网上有人提到不要在串口中断服务函数中使用printf函数,避免出现问题

      • 本人在进行窗口看门狗实验时,在中断服务函数中使用了printf函数,但发现程序不能执行

        故此,应当在各类中断服务函数中谨慎使用printf函数

  2. printf 函数的使用方法

    printf("<格式化字符串>", <参量表>);
    
  • 格式化规定字符

    符号 含义
    %d 按照十进制整型数打印
    %6d 按照十进制整型数打印,至少6个字符宽
    %f 按照浮点数打印
    %6f 按照浮点数打印,至少6个字符宽
    %.2f 按照浮点数打印,小数点后有2位小数
    %6.2f 按照浮点数打印,至少6个字符宽,小数点后有2位小数
    %x 按照十六进制打印
    %c 打印字符
    %s 打印字符串
  • 使用样例

    	int data=1234;
    	printf(“输出整型数据data=%d\r\n”,data);//在输出时,%d的位置由参量表替代
    

你可能感兴趣的:(stm32,单片机,arm)