为什么要重定向printf函数?
printf函数是底层函数,含于stdio.h头文件。因为在C语言中printf函数已经定义为默认输出到显示器的,若要想在串口上显示,那就需要重定向printf。例如将printf函数重定向到USART1上,这样就可以利用printf函数将单片机的数据打印到PC上的超级终端或者串口调试助手。
重新定义标准库函数里调用的与输出设备相关的函数:
不同库中的fputc输出指向不同
标准库函数的重定向
///重定向c库函数printf到串口,重定向后可使用printf函数
//内部调用函数,注意要勾选TARGET中的USE Micro LIB选项
int fputc(int ch, FILE *f)//函数默认的,在使用 printf 函数时自动调用
{
/* 发送一个字节数据到串口 */
USART_SendData(USARTx, (u8) ch);
/* 等待发送完毕 */
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
return (ch);
}
int fputc(int ch, FILE *f)
{
USART_SendData(USARTx, (unsigned char) ch);
while (!(USARTx->SR & USART_FLAG_TXE));
return (ch);
}
///重定向c库函数scanf到串口,重定向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
/* 等待串口输入数据 */
while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(USARTx);
}
HAL库中重定向到huartx
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huartx, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)