串口怎么用printf函数发送数据
串口和串口之间的通信是串口通信(Serial Communi罕铞泱殳cation), 它是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。在51程序中我们常常使用printf函数对串口进行数据输出,很是方便。如此方便的函数,STM32(ARM处理器)在MDK中却是不能直接使用,它却需要我们进行一些修改和添加一些程序定义才可以像51使用。

2、库变量: FILE 这是一个对象的类型,适合用于存储信息的一个文件流。库宏: stderr, stdin, and stdout 这些宏的文件类型对应的标准误差,标准输入,标准输出流的指针。

相关概念:
1、半主机模式: 半主机是用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。 例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。
2、重定义: 就是重新再一次的定义函数,使其拥有新的定义,然后完成新的功能的过程。重定向: MDK原本目标是PC机的显示器,然后由于重定向,修改了printf的底层函数(重定义),使printf打印到单片机的外设中。

3、解决办法2:1)确保程序中没有链接 C 频骑夭挞库半主机函数 #pragma import(__use_no_semihosting)2)需要髹瑕扔麝支持的标准库文件来消除被提及函数的问题 //支持使用半主机函数的标准库文件 struct __FILE { int handle; }; FILE __stdout; 3)因为使用了半主机函数,而被要求的函数 //重新定义_sys_exit(),消除编译出错的问题 _sys_exit(int x) { x = x; }4)重定向,让printf输出到串口 int fputc(int ch, FILE *f) { USART_SendData(USART1,ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); return ch; }注:必须要把四部分写完整才可以。然后串口就可以使用printf发送数据了。
