使用printf 需要进行重定向,printf 实际上是使用串口输出。 其实很简单: 在keil中 勾选箭头所示的 Use MicroLIB 使用微库
再在代码中加入函数 :
#include <stdio.h> int fputc(int ch, FILE* stream) { while (!(USART1->SR & USART_FLAG_TXE)); USART_SendChar(USART1, (uint8_t)ch); return ch; }此函数原本是将字符ch打印到文件指针stream所指向的文件流去的,现在我们不需要打印到文件流,而是打印到串口1
注意:需要将头文件#include <stdio.h>加入 ,上面函数的红色部分就是中断里的判断那一句,不加也可以,加上做个判断而已。加入后就可以使用printf 函数了,
这只是一种方法 还有其他方法:不使用微库
#pragma import(__use_no_semihosting) //标准库需要支持函数 struct __FILE { int handle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 _sys_exit(int x) { x = x; } //重定义fput()函数。UART5:根据需求更改串口 int fputc(int ch, FILE *f) { /*将printf内容发往串口*/ USART_SendData(UART5,(uint8_t)ch); while(USART_GetFlagStatus(UART5, USART_FLAG_TC) == RESET); return ch; }一般选择第二种方法,第二种方法使用c标准库,毕竟标准库,稳定。微库的话可能会有一些实现出问题,目前貌似也没啥问题。