STM32ARM单片机USART2使用Printf函数的一点心得
今天刚学到用串口Printf输出,在例程中没有看到USART2使用Printf函数的方法。
在网上看了一些方法,但好像没有我使用的这种。不知这么使用有错误吗,但可以使用。
在使用USART1时用printf会有两个函数
int fputc(int ch, FILE *f)
int fgetc(FILE *f)
这两个函数中重新定义了putcgetc函数,使可以使用Printfscanf函数;我在其中又定义了USART2 ,如下:
/*
*********************************************************************************************************
*    : fputc
*    功能说明: 重定义putc函数,这样可以使用printf函数从串口1打印输出
*        :
*    :
*********************************************************************************************************
*/
int fputc(int ch, FILE *f)
{
    /* 写一个字节到USART1 */
    USART_SendData(USART1, (uint8_t) ch);
    /* 等待发送结束 */
    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
    {}
    USART_SendData(USART2, (uint8_t) ch);
    /* 等待发送结束 */
    while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
    {}
    return ch;
}
/*
*********************************************************************************************************
*    : fgetc
*    功能说明: 重定义getc函数,这样可以使用scanff函数从串口1输入数据
*        :
函数printf
*    :
*********************************************************************************************************
*/
int fgetc(FILE *f)
{
    /* 等待串口1输入数据 */
    while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
    return (int)USART_ReceiveData(USART1);
    while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
    return (int)USART_ReceiveData(USART2);
}
没有进行太多测试,只是将串口在串口1换到串口2printf函数可以使用。希望高手多多指正。