- Date:2023-06-05

  • Time:17:08
  • Subject: none
  • Tags: #stm32
    [[2023-06]]

printf函数输出流程

Pasted image 20230605171222|600

printf的使用

1
2
3
4
5
6
//printf("字符串\r\n");
printf("Hello World!\r\n");

//printf("输出控制符",输出参数);
uint32_t  temp = 10;
printf("%d\r\n", temp);          /* %d是输出控制符,temp是输出参数 */

常用输出控制符表

Pasted image 20230605172851|600

常用转义字符表

Pasted image 20230605172915|600

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
//printf("输出控制符1输出控制符2…",输出参数1,输出参数2,…);
uint32_t temp1 = 5;
uint32_t temp2 = 10;
printf("%d%x \r \n", temp1,temp2);

//printf("非输出控制符 输出控制符 非输出控制符",输出参数);
uint32_t  temp = 10;  
printf("temp=  %d  收到over\r\n", temp);

//如何输出%、\和双引号
printf("%% \r\n");// %
printf("\\\r\n");// \
printf("\"\"\r\n");// ""

printf函数支持

Pasted image 20230605173458|600

半主机模式简介

用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机
简单说:就是通过仿真器实现开发板在电脑上的输入和输出
一般我们:不使用半主机模式!!!

方法一:微库法

在魔术棒->Target选项卡,勾选:Use Micro LIB,即可避免半主机模式
Pasted image 20230605173808|600

方法二:代码法

1个预处理、 2个定义、3个函数,会用就行

  1. pragma import(__use_no_semihosting),确保不从C库中使用半主机函数

  2. 定义:__ FILE结构体,避免HAL库某些情况下报错
  3. 定义: FILE __ stdout,避免编译报错
  4. 实现:_ ttywrch、_ sys_exit和_sys_command_string等三个函数
    在历程(uart.c)中已经实现了
    到时候拷贝就好

微库法 VS 代码法

Pasted image 20230605174027|600

实现fputc函数

Pasted image 20230605175055|600
也不需要怎么知道