在调试过程中往往需要通过打印来看系统运行状态;在STM32平台上,打印重定向有多种实现方案;其一是编译时使用keil自带的MacroLIB,据说这个库对一些C语言基础设施做了新的实现,代码结构更加紧凑;但这种库没法取得源码,所以就不能进一步研究具体怎么实现的,很遗憾;还有一种实现方案是使用标准C(I/O)库,但这种方式下要注意修改避免使用semihosting(半主机模式),下面对两种方案做以简单说明。
方案一 使用mcrolib库: 1、首先在option里边勾选mcrolib 2、重写putchar函数,已验证,如果使用当前库,printf会调用putchar;换句话说就是printf的具体实现会调用putchar /// 重定向printf到uart
int fputc(int ch, FILE *f)
{
//发送一字节数据到UART<br> ch = 0x0a;
USART_SendData(macUSARTx, (uint8_t) ch);
//检测UART状态
while (USART_GetFlagStatus(macUSARTx, USART_FLAG_TXE) == RESET);
return (ch);
}
3、在使用printf之前初始化UART,之后调用即可。效果如下:
|