IAR 中 printf() 会默认输出到 Terminal I/O 窗口中。Terminal I/O 的使用方法是,在 Debug 模式下,点击“View-Terminal I/O”。
但是,我们也可以自定义 printf() 函数,让其输出到 UART 或 LCD。
为了输出到 UART 等其他设备中,我们需要做两件“大事”。
1.修改工程配置参数;
2.编写移植代码。
1.修改工程配置参数
要将 printf() 输出到其他设备中,需要在工程配置中将 "General Operations-Library Configuration-Library" 设置为 "Full DLIB",否则无法编译通过。再将 "General Operations-Library Options-Printf formatter" 设置为 "Full" 否则堆栈会溢出。
2.编写移植代码
只要在需要调用 printf() 的程序中包含类似下列代码即可:
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
/**
* 自定义代码,示例如下:
*/
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
/**
* 自定义代码结束
*/
return ch;
}
以上代码会根据编译环境选择合适的函数名。别忘记在使用其他设备进行标准格式化输出之前,先对该设备进行初始化。从其他设备读入字符数据所用的 scanf() 的配置方式与 printf() 类似。参考 IAR 的 stdio.h 文件,我们可以对其他 标准 IO 函数 进行自定义配置。
|