1、在 STM32 串口通信程序中使用 printf 发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入 main 主函数,其实只要简单的配置一下就可以了。下面就说一下使用 printf 需要做哪些配置。有两种配置方法:一、对工程属性进行配置,详细步骤如下1、首先要在你的 main 文件中 包含“stdio.h” (标准输入输出头文件)。2、在 main 文件中重定义函数 如下:/ 发送数据int fputc(int ch, FILE *f)USART_SendData(USART1, (unsigned char) ch);/ USART1 可以换成 USART2
2、 等while (!(USART1-SR return (ch);/ 接收数据int GetKey (void) while (!(USART1-SR return (int)(USART1-DR 这样在使用 printf 时就会调用自定义的 fputc 函数,来发送字符。3、在工程属性的 “Target“ - “Code Generation“ 选项中勾选 “Use MicroLIB“” MicroLIB 是缺省 C 的备份库,关于它可以到网上查找详细资料。至此完成配置,在工程中可以随意使用 printf 向串口发送数据了。二、第二种方法是在工程中添加“Regtarge.c”文件1、在 ma
3、in 文件中包含 “stdio.h” 文件2、在工程中创建一个文件保存为 Regtarge.c , 然后将其添加工程中在文件中输入如下内容(直接复制即可)#include #include #pragma import(_use_no_semihosting_swi)extern int SendChar(int ch); / 声明外部函数,在 main 文件中定义extern int GetKey(void);struct _FILE int handle; / Add whatever you need here ;FILE _stdout;FILE _stdin;int fputc(in
4、t ch, FILE *f) return (SendChar(ch);int fgetc(FILE *f) return (SendChar(GetKey();void _ttywrch(int ch) SendChar (ch);int ferror(FILE *f) / Your implementation of ferrorreturn EOF;void _sys_exit(int return_code) label: goto label; / endless loop3、在 main 文件中添加定义以下两个函数int SendChar (int ch) while (!(USART1-SR / USART1 可换成你程序中通信的串口USART1-DR = (ch return (ch);int GetKey (void) while (!(USART1-SR return (int)(USART1-DR 至此完成配置,可以在 main 文件中随意使用 printf 。