stm32-c语言复习

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
也不需要怎么知道